Android – отключить ландшафтный режим?

Как отключить ландшафтный режим для некоторых видов в приложении для Android?

Solutions Collecting From Web of "Android – отключить ландшафтный режим?"

Добавить android:screenOrientation="portrait" для активности в AndroidManifest.xml. Например:

 <activity android:name=".SomeActivity" android:label="@string/app_name" android:screenOrientation="portrait" /> 

EDIT: Поскольку это стало супер-популярным ответом, я чувствую себя очень виноватым, так как принудительный портрет редко является правильным решением проблем, к которым он часто применяется.
Основные предостережения с принудительным портретом:

  • Это не освобождает вас от необходимости думать о событиях жизненного цикла активности или правильно сохранять / восстанавливать состояние. Существует множество вещей, помимо поворота приложения, которые могут вызвать разрушение / восстановление активности, в том числе неизбежные вещи, такие как многозадачность. Нет ярлыков; Научиться использовать пакеты и retainInstance фрагментыInstance.
  • Имейте в виду, что в отличие от довольно однородного опыта iPhone существует множество устройств, где портрет не является явно популярной ориентацией. Когда пользователи находятся на устройствах с аппаратными клавишами или игровыми площадками a la the Droid 1-4, Xperia Play или Nvidia Shield, форсирование портрета может сделать ваше приложение гигантской непростой задачей (особенно на экране). Если ваше приложение не имеет особо конкретного варианта использования, который приведет к откровенному негативному опыту для поддержки других ориентаций, вы, вероятно, не должны форсировать пейзаж. Я говорю о таких вещах, как «это приложение для удаленного управления телефоном с ИК-бластером только на одной стороне устройства» или «это приложение для кассового аппарата для одной конкретной модели планшета, всегда используемой в фиксированном Аппаратной док-станции ».

Таким образом, большинство приложений должны просто позволить датчикам, программному обеспечению и физической конфигурации телефона принимать собственное решение о том, как пользователь хочет взаимодействовать с вашим приложением. В некоторых случаях, о которых вы все еще можете подумать, если вас не устраивает поведение sensor по умолчанию в вашем случае использования:

  • Если ваша основная забота – случайная ориентация, измените среднюю активность, что, по вашему мнению, датчики и программное обеспечение устройства не будут хорошо справляться (например, в игре с наклоном), рассмотрите поддержку пейзажа и портрета, но используйте nosensor для ориентации. Это накладывает пейзаж на большинство планшетов и портрет на большинстве телефонов, но я по-прежнему не рекомендую это для большинства «нормальных» приложений (некоторые пользователи просто набирают альбомную клавиатуру на своих телефонах, а многие пользователи планшета читают в портретном и Вы должны позволить им).
  • Если по какой-то причине вам по- прежнему нужно принудительно sensorPortrait , sensorPortrait может быть лучше, чем portrait для Android 2.3+; Это позволяет перевернутый портрет, что довольно часто встречается в использовании планшета.

Я не знал о переключении файла AndroidManifest.xml пока не прочитал этот пост, поэтому в моих приложениях я использовал это вместо этого:

 setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); // Fixed Portrait orientation 

Добавьте это. Добавить android:screenOrientation="portrait" в вашем файле манифеста, где вы объявляете свою активность следующим образом:

 <activity android:name=".yourActivity" .... android:screenOrientation="portrait"/> 

Если вы хотите использовать java-код, попробуйте

 setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

Прежде чем вы setContentView для своей деятельности в onCreate() надежде на помощь и легко понятным для кого-то.

Многие ответы здесь предлагают использовать "portrait" в вашем файле AndroidManifest.xml. Это может показаться хорошим решением, но, как отмечается в документации, вы выделяете устройства, которые могут иметь только ландшафт. Вы также заставляете определенные устройства (которые лучше всего работают в ландшафте) входить в портрет, не получая правильной ориентации.

Мое предложение состоит в том, чтобы вместо этого использовать "nosensor" . Это не позволит устройству использовать предпочтительную ориентацию по умолчанию, не будет блокировать покупки / загрузки в Google Play и будет гарантировать, что датчик не испортит вашу игру (NDK, в моем случае).

Если вам нужны пользовательские настройки,

То я бы рекомендовал setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

Вы можете изменить настройки в меню настроек.

Я требую этого, потому что мои таймеры должны соответствовать тому, что на экране, и вращение экрана уничтожит текущую активность.

Просто добавьте Like This Line в свой манифест

андроид: screenOrientation = "портрет"

 <manifest package="com.example.speedtestmeter" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="8" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="MainActivity" android:label="@string/app_name" android:screenOrientation="portrait" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="ComparisionActivity" android:label="@string/app_name" android:screenOrientation="portrait" > </activity> <activity android:name="GaugeView" android:label="@string/app_name" android:screenOrientation="portrait" > </activity> <activity android:name="Resultactivity" android:label="@string/app_name" android:screenOrientation="portrait" > </activity> </application> </manifest> 

Просто добавьте этот атрибут в свой тег активности.

  android:screenOrientation="portrait" 

Вы должны изменить android:screenOrientation="sensorPortait" в AndroidManifest.xml

Добавьте следующий фрагмент в файл манифеста.

 <activity android:name=".yourActivity" .... android:screenOrientation="portrait"/> 

Это поддерживает только портретный режим

Добавить android:screenOrientation="portrait" в действие, которое вы хотите отключить ландшафтный режим.

Если вы хотите отключить Landscape mode for your android app (или одного действия), вам нужно добавить,

android:screenOrientation="portrait" в тег активности в файле AndroidManifest.xml .

Подобно:

 <activity android:name="YourActivityName" android:icon="@drawable/ic_launcher" android:label="Your App Name" android:screenOrientation="portrait"> 

Другой путь, программный подход.

Если вы хотите сделать это программно, т.е. Используя Java-код. Вы можете сделать это, добавив нижеприведенный код класса Java, который вы не хотите отображать в ландшафтном режиме.

 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

Надеюсь, вам это поможет. За более подробной информацией вы можете ознакомиться здесь, в описании ссылки.

Используйте это в onCreate () действия

 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

использование

 android:configChanges="keyboardHidden|orientation" android:screenOrientation="portrait" 

Вы должны установить ориентацию каждого вида деятельности.

 <activity android:name="com.example.SplashScreen2" android:label="@string/app_name" android:screenOrientation="portrait" android:theme="@android:style/Theme.Black.NoTitleBar" > </activity> <activity android:name="com.example.Registration" android:label="@string/app_name" android:screenOrientation="portrait" android:theme="@android:style/Theme.Black.NoTitleBar" > </activity> <activity android:name="com.example.Verification" android:label="@string/app_name" android:screenOrientation="portrait" android:theme="@android:style/Theme.Black.NoTitleBar" > </activity> <activity android:name="com.example.WelcomeAlmostDone" android:label="@string/app_name" android:screenOrientation="portrait" android:theme="@android:style/Theme.Black.NoTitleBar" > </activity> <activity android:name="com.example.PasswordRegistration" android:label="@string/app_name" android:screenOrientation="portrait" android:theme="@android:style/Theme.Black.NoTitleBar" > </activity> 

Добавить класс внутри метода oncreate ()

  setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

Если вы используете Xamarin C #, некоторые из этих решений не будут работать. Вот решение, которое я нашел для работы.

 [Activity(MainLauncher = true, Icon = "@drawable/icon", ScreenOrientation = ScreenOrientation.Portrait)] 

Над классом хорошо работает, аналогично другим решениям, также не применимым в глобальном масштабе и необходимо размещать в каждом заголовке деятельности.

Как изменить ориентацию в некоторой точке зрения

Вместо того, чтобы фиксировать ориентацию всей активности, вы можете использовать этот класс для динамической блокировки ориентации из любого из ваших представлений прагматически:

Сделайте свое представление Пейзаж

 OrientationUtils.lockOrientationLandscape(mActivity); 

Сделать свой портрет Портрет

 OrientationUtils.lockOrientationPortrait(mActivity); 

Разблокировать ориентацию

 OrientationUtils.unlockOrientation(mActivity); 

Ориентировочный класс Util

 import android.app.Activity; import android.content.Context; import android.content.pm.ActivityInfo; import android.content.res.Configuration; import android.os.Build; import android.view.Surface; import android.view.WindowManager; /* * This class is used to lock orientation of android app in nay android devices */ public class OrientationUtils { private OrientationUtils() { } /** Locks the device window in landscape mode. */ public static void lockOrientationLandscape(Activity activity) { activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE); } /** Locks the device window in portrait mode. */ public static void lockOrientationPortrait(Activity activity) { activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } /** Locks the device window in actual screen mode. */ public static void lockOrientation(Activity activity) { final int orientation = activity.getResources().getConfiguration().orientation; final int rotation = ((WindowManager) activity.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay() .getRotation(); // Copied from Android docs, since we don't have these values in Froyo // 2.2 int SCREEN_ORIENTATION_REVERSE_LANDSCAPE = 8; int SCREEN_ORIENTATION_REVERSE_PORTRAIT = 9; // Build.VERSION.SDK_INT <= Build.VERSION_CODES.FROYO if (!(Build.VERSION.SDK_INT <= Build.VERSION_CODES.FROYO)) { SCREEN_ORIENTATION_REVERSE_LANDSCAPE = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE; SCREEN_ORIENTATION_REVERSE_PORTRAIT = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT; } if (rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_90) { if (orientation == Configuration.ORIENTATION_PORTRAIT) { activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } else if (orientation == Configuration.ORIENTATION_LANDSCAPE) { activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); } } else if (rotation == Surface.ROTATION_180 || rotation == Surface.ROTATION_270) { if (orientation == Configuration.ORIENTATION_PORTRAIT) { activity.setRequestedOrientation(SCREEN_ORIENTATION_REVERSE_PORTRAIT); } else if (orientation == Configuration.ORIENTATION_LANDSCAPE) { activity.setRequestedOrientation(SCREEN_ORIENTATION_REVERSE_LANDSCAPE); } } } /** Unlocks the device window in user defined screen mode. */ public static void unlockOrientation(Activity activity) { activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER); } } 

Просто добавьте android: screenOrientation = "портрет" в тег активности в манифесте приложения.

Например:

  <activity android:name=".ui.activities.MainActivity" android:screenOrientation="portrait"></activity> 

Если вы не хотите, чтобы вы столкнулись с необходимостью добавления ориентации в каждой манифестной записи активности, создайте класс BaseActivity (наследует «Activity» или «AppCompatActivity»), который будет наследоваться каждым действием вашего приложения, а не «Активность» 'Или' AppCompatActivity 'и просто добавьте следующий код в свой BaseActivity:

 @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); // rest of your code...... } 
 <android . . . > . . . <manifest . . . > . . . <application> <activity android:name=".MyActivity" android:screenOrientation="portrait" android:configChanges="keyboardHidden|orientation"> </activity> </application> </manifest> </android> 

Вы можете заставить свою конкретную деятельность всегда оставаться в портретном режиме, написав это в своем манифесте. Xml

  <activity android:name=".MainActivity" android:screenOrientation="portrait"></activity> 

Вы также можете заставить свою деятельность оставаться в режиме postrait, написав следующую строку в методе onCreate () вашей активности

  @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.your_layout); setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } 

Вы должны поместить этот код в файл манифеста …….

  <activity android:name=".SunderFlowersActivity" android:label="@string/app_name" android:screenOrientation="portrait"> > </activity> 

В <apphome>/platform/android создан AndroidManifest.xml (копирование его из сгенерированного). Затем добавьте android:screenOrientation= " portrait " для ВСЕХ элементов активности.

Add android: screenOrientation = "портрет" в файле AndroidManifest.xml. example <activity android:name=".MapScreen" android:screenOrientation="portrait"></activity>

В надежде помочь кому-то еще, следующий атрибут в ACTIVITY в AndroidManifest.xml – это все, что вам нужно:

Android: configChanges = "ориентация"

Итак, полный узел активности:

 <activity android:name="Activity1" android:icon="@drawable/icon" android:label="App Name" android:configChanges="orientation"> 

Если ваша деятельность связана с первым состоянием ориентации устройства, получите текущую ориентацию устройства в методе onCreate а затем исправьте его навсегда:

  int deviceRotation = ((WindowManager) getBaseContext().getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getOrientation(); if(deviceRotation == Surface.ROTATION_0) { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } else if(deviceRotation == Surface.ROTATION_180) { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT); } else if(deviceRotation == Surface.ROTATION_90) { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); } else if(deviceRotation == Surface.ROTATION_270) { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE); } 

В kotlin же может быть программно достигнуто, используя ниже

 requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT 
  <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="in.co.nurture.bajajfinserv"> <uses-permission android:name="android.permission.INTERNET"></uses-permission> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity" android:screenOrientation="portrait"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> 

Мы можем ограничить действие в портретном или ландшафтном режиме, используя атрибут orroid: screenOrientation.

Если в моей программе есть более одного действия, то у вас есть свобода ограничивать любую деятельность в любом режиме, и она никогда не влияет на другие, которые вы не хотите.