Глядя на AndroidManifest.xml ( ссылка ) в строке 9:
<activity android:screenOrientation="landscape" android:configChanges="orientation|keyboardHidden" android:name="VncCanvasActivity">
Эта строка указывает screenOrientation
как альбомную, но автор идет дальше, отменяя любые изменения ориентации экрана с помощью configChanges="orientation|keyboardHidden"
. Это указывает на переопределенную функцию в VncCanvasActivity.java.
Если вы посмотрите на VncCanvasActivity, в строке 109 будет переопределенная функция:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
}
Автор специально добавил комментарий, чтобы игнорировать любые изменения клавиатуры или ориентации.
Если вы хотите изменить это, вы можете вернуться к файлу AndroidManifest.xml, показанному выше, и изменить строку на:
<activity android:screenOrientation="sensor" android:name="VncCanvasActivity">
Это должно изменить программу, чтобы переключаться с книжной на альбомную, когда пользователь поворачивает устройство.
Это может сработать, но может испортить внешний вид графического интерфейса пользователя, в зависимости от того, как был создан макет. Вы должны будете это учитывать. Кроме того, в зависимости от того, как закодированы действия, вы можете заметить, что при изменении ориентации экрана значения, которые были заполнены в любых полях ввода, исчезают. С этим тоже, возможно, придется справиться.
configChanges
нужен атрибут? Кажется, он работает на моем телефоне без клавиатуры и без него ... В каких ситуациях ориентация изменится на портретную, если у вас есть,screenOrientation="landscape"
но опуститьconfigChanges
?If your application targets API level 13 or higher (as declared by the minSdkVersion and targetSdkVersion attributes), then you should also declare the "screenSize" configuration, because it also changes when a device switches between portrait and landscape orientations.
Вы также можете установить те же данные в своем Java-коде.
myActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
Другие значения ActivityInfo позволят вам вернуть его к управляемому датчику или заблокированному портрету. Лично мне нравится устанавливать для него что-то в манифесте, как предлагается в другом ответе на этот вопрос, а затем изменять его позже, используя указанный выше вызов в Android SDK, если в этом есть необходимость.
источник
If the activity is currently in the foreground or otherwise impacting the screen orientation, the screen will immediately be changed (possibly causing the activity to be restarted)
В моем
OnCreate(Bundle)
я обычно делаю следующее:this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
источник
Вы можете указать направление деятельности в манифесте. Смотрите здесь .
<activity android:allowTaskReparenting=["true" | "false"] ... android:screenOrientation=["unspecified" | "user" | "behind" | "landscape" | "portrait" | "sensor" | "nosensor"] ... "adjustResize", "adjustPan"] >
источник
В манифесте:
<activity android:name=".YourActivity" android:screenOrientation="portrait" android:configChanges="orientation|screenSize">
В вашей деятельности:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); setContentView(R.layout.your_activity_layout);
источник
Ниже приведен код, который я использовал для отображения всей активности в ландшафтном режиме:
<activity android:screenOrientation="landscape" android:configChanges="orientation|keyboardHidden" android:name="abcActivty"/>
источник
Быстрое и простое решение для файла AndroidManifest.xml: добавьте следующее для каждого действия, которое вы хотите принудительно переключить в альбомный режим:
android:screenOrientation="landscape"
источник
Это работает для Xamarin.Android. В OnCreate ()
RequestedOrientation = Android.Content.PM.ScreenOrientation.Landscape;
источник
Это оно!! Долго ждал этого исправления.
У меня старая проблема Android с двойным запуском действия, которое требовало (программно) ландшафтного режима:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)
Теперь Android при запуске делает альбомный режим.
источник
Арслан, почему ты хочешь принудительно ориентировать программно, хотя способ уже есть в манифесте
<activity android:name=".youractivityName" android:screenOrientation="portrait" />
источник
Делать это в коде - это неправильно ИМО, и тем более, если вы поместите его в onCreate. Сделайте это в манифесте, и «система» узнает ориентацию с момента запуска приложения. И этот тип мета или «руководства» верхнего уровня ДОЛЖЕН быть в манифесте. Если вы хотите доказать это себе, установите перерыв в Activity onCreate. Если вы сделаете это в коде, он будет вызываться дважды: он запускается в портретном режиме, затем переключается в альбомный. Этого не произойдет, если вы сделаете это в манифесте.
источник
Добавить в действие следующие строки
Вам нужно войти в каждое действие
для пейзажа
android:screenOrientation="landscape" tools:ignore="LockedOrientationActivity"
для портрета
android:screenOrientation="portrait" tools:ignore="LockedOrientationActivity"
Вот пример MainActivity
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="org.thcb.app"> <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="landscape" tools:ignore="LockedOrientationActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".MainActivity2" android:screenOrientation="portrait" tools:ignore="LockedOrientationActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
источник
Для Android 4.0 (Ice Cream Sandwich) и более поздних версий мне нужно было добавить их, помимо
landscape
значения.android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
Использование только
keyboardHidden|orientation
все равно приведет к утечке памяти и восстановлению моих действий при нажатии кнопки питания.источник
orientation|screensize
было недостаточно во всех случаях. Он автоматически вернется в портретное положение.Используйте ActivityInfo (android.content.pm.ActivityInfo) в своем методе onCreate перед вызовом метода setLayout, подобного этому
this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
источник
используйте только
android: screenOrientation = "portrait" tools: ignore = "LockedOrientationActivity"
источник
Нажмите,
CTRL+F11
чтобы повернуть экран.источник