Отключить ландшафтный режим в Android?
Как отключить ландшафтный режим для некоторых видов в моем приложении для Android?
30 ответов:
добавить
android:screenOrientation="portrait"
к активности в AndroidManifest.XML. Например:<activity android:name=".SomeActivity" android:label="@string/app_name" android:screenOrientation="portrait" />
EDIT: поскольку это стало супер-популярным ответом, я чувствую себя очень виноватым, поскольку принудительный портрет редко является правильным решением проблем, к которым он часто применяется.
Основные предостережения с принудительным портретом:
- это не освобождает вас от необходимости думать о деятельности события жизненного цикла или правильное сохранение / восстановление состояния. Есть много вещи, кроме того вращение приложения, которое может вызвать действие разрушение / отдых, включая неизбежные вещи, такие как многозадачность. Там нет ярлыков; научиться использовать пакеты и
retainInstance
фрагменты.- имейте в виду, что в отличие от довольно однородного опыта iPhone, есть много устройств, где портрет не является явно популярной ориентацией. Когда пользователи находятся на устройствах с аппаратными клавиатурами или игровыми площадками a la Droid 1-4, Xperia Play или Nvidia Shield, принудительный портрет может сделать ваше приложение a гигантские хлопоты юзабилити (особенно на щите). Если ваше приложение не имеет чрезвычайно специфического варианта использования, который привел бы к прямому негативному опыту для поддержки других ориентаций, вы, вероятно, не должны форсировать ландшафт. Я говорю о таких вещах, как "это приложение дистанционного управления для телефона с ИК-бластером только на одной стороне устройства" или "это кассовое приложение для одной конкретной модели планшета, всегда используемой в фиксированной аппаратной док-станции."
так что большинство приложения должны просто позволить датчикам телефона, программному обеспечению и физической конфигурации принимать собственное решение о том, как пользователь хочет взаимодействовать с вашим приложением. Несколько случаев, о которых вы все еще можете подумать, хотя, если вы не довольны поведением по умолчанию
sensor
ориентация в вашем случае использовать:
- если ваша главная забота-случайные изменения ориентации в середине активности, с которыми, по вашему мнению, датчики и программное обеспечение устройства не справятся (например, в игре на основе наклона) рассмотрите возможность поддержки ландшафта и портрета, но с помощью
nosensor
для ориентации. Это заставляет пейзаж на большинстве планшетов и портрет на большинстве телефонов, но я все равно не рекомендовал бы это для большинства "нормальных" приложений (некоторые пользователи просто любят вводить ландшафтный softkeyboard на своих телефонах, и многие пользователи планшетов читают в портрете - и вы должны позволить им).- если вы еще нужно заставить портрет по какой-то причине
sensorPortrait
может быть лучше, чемportrait
для Android 2.3+; это позволяет для перевернутого портрета, который довольно распространен в использовании планшета.
Я не знал о
AndroidManifest.xml
file switch до прочтения этого сообщения, поэтому в моих приложениях я использовал это вместо: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);
вы можете изменить настройки из меню Настройки.
Я требую этого, потому что мои таймеры должны соответствовать тому, что на экране, и поворот экрана уничтожит текущую активность.
просто добавьте такую строку в свой Манифест
android: 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>
используйте это в onCreate () действия
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Если вы не хотите проходить через хлопоты добавления ориентации в каждой записи манифеста activity лучше, создайте класс BaseActivity (наследует "Activity" или "AppCompatActivity"), который будет наследоваться каждым действием вашего приложения вместо "Activity" или "AppCompatActivity" и просто добавьте следующий фрагмент кода в свою BaseActivity:
@Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); // rest of your code...... }
добавьте следующий фрагмент в файл манифеста.
<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">
Другой Способ , Программный Подход.
если вы хотите сделать это программно ie. с помощью Java-кода. Вы можете сделать это, добавив следующий код в Java-класс, что вы не хотите быть отображены в ландшафтном режиме.
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); } }
вы можете заставить вашу конкретную деятельность всегда оставаться в портретном режиме, написав это в манифесте.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); }
просто добавить android: screenOrientation= " портрет" к тегу действия в манифесте приложения.
например:
<activity android:name=".ui.activities.MainActivity" android:screenOrientation="portrait"></activity>
вы должны поставить этот код в файл манифеста.......
<activity android:name=".SunderFlowersActivity" android:label="@string/app_name" android:screenOrientation="portrait"> > </activity>
<android . . . > . . . <manifest . . . > . . . <application> <activity android:name=".MyActivity" android:screenOrientation="portrait" android:configChanges="keyboardHidden|orientation"> </activity> </application> </manifest> </android>
на создано
AndroidManifest.xml
(копирование из сгенерированного). Затем добавьтеandroid:screenOrientation=
"portrait
" для всех элементов активности.
добавить android: screenOrientation= "портрет" в AndroidManifest.XML-файл.
example <activity android:name=".MapScreen" android:screenOrientation="portrait"></activity>
вы можете сделать это для всего приложения без необходимости делать все ваши действия расширить общий базовый класс.
хитрость заключается в том, чтобы сначала убедиться, что вы включаете подкласс приложения в свой проект. В своем onCreate (), вызываемом при первом запуске приложения, вы регистрируете объект ActivityLifecycleCallbacks (уровень API 14+) для получения уведомлений о событиях жизненного цикла активности.
Это дает возможность выполнять свой код всякий раз, когда активность в вашем приложении запускается (или останавливается, или возобновляется, или что-то еще). На этом этапе можно вызвать setRequestedOrientation () для вновь созданного действия.
и не забудьте добавить приложение: name=".MyApp " в вашем файле манифеста.
class MyApp extends Application { @Override public void onCreate() { super.onCreate(); // register to be informed of activities starting up registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() { @Override public void onActivityCreated(Activity activity, Bundle savedInstanceState) { // new activity created; force its orientation to portrait activity.setRequestedOrientation( ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } .... }); }
}
в надежде помочь кому-то еще, следующий атрибут на активность в 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); }
в Котлине же можно программно добиться с помощью ниже
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>
мы можем ограничить активность в портретном или ландшафтном режиме с помощью атрибута или Android:screenOrientation.
если у нас есть более чем одна деятельность в моей программе, то у вас есть свобода ограничивать любую деятельность в любом режиме, и она никогда не влияет на другие, которые вы не хотите.
это сработало для меня, попробуйте добавить этот код в файл AndroidManifest
<application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:screenOrientation="portrait" android:theme="@style/AppTheme"> .... .... </application>