Подтвердить что ты не робот

Принудительное действие Android для использования ландшафтного режима

Я использую Android VNC на моем HTC G1. Но по какой-то причине это приложение всегда находится в ландшафтном режиме, несмотря на то, что мой G1 находится в портретном режиме. Поскольку средство просмотра VNC для Android является открытым исходным кодом, я хотел бы знать, как это возможно, чтобы жесткий код выглядел как "пейзаж". Я хотел бы изменить его, чтобы уважать ориентацию телефона.

4b9b3361

Ответ 1

Глядя на 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) {
  // ignore orientation/keyboard change
  super.onConfigurationChanged(newConfig);
}

Автор специально поставил комментарий, чтобы игнорировать изменения клавиатуры или ориентации.


Если вы хотите изменить это, вы можете вернуться в файл AndroidManifest.xml, показанный выше, и изменить строку на:

<activity android:screenOrientation="sensor" android:name="VncCanvasActivity">

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

Это может сработать, но может испортить работу GUI, в зависимости от того, как был создан макет. Вам придется это учитывать. Кроме того, в зависимости от того, как кодируются действия, вы можете заметить, что при изменении ориентации экрана значения, заполненные в любые поля ввода, исчезают. Возможно, это также придется обрабатывать.

Ответ 2

Вы также можете установить те же данные в свой Java-код.

myActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

Другие значения в ActivityInfo позволят вам установить его обратно на сенсорный или заблокированный портрет. Лично мне нравится указывать что-то в манифесте, как было предложено в другом ответе на этот вопрос, а затем изменить его позже, используя вышеупомянутый вызов в Android SDK, если есть необходимость.

Ответ 3

В моем OnCreate(Bundle) я обычно делаю следующее:

this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

Ответ 4

Вы можете указать ориентацию активности в манифесте. См. здесь.

<activity android:allowTaskReparenting=["true" | "false"]
...
          android:screenOrientation=["unspecified" | "user" | "behind" |
                                     "landscape" | "portrait" |
                                     "sensor" | "nosensor"]
...
                                       "adjustResize", "adjustPan"] >  

Ответ 5

В манифесте:

<activity  android:name=".YourActivity"
android:screenOrientation="portrait"
android:configChanges="orientation|screenSize">

Ответ 6

Ниже приведен код, который я использовал для отображения всей активности в ландшафтном режиме:

<activity android:screenOrientation="landscape"
          android:configChanges="orientation|keyboardHidden"
          android:name="abcActivty"/>

Ответ 7

Быстрое и простое решение для файла AndroidManifest.xml, добавьте следующее для каждого действия, которое вы хотите принудительно использовать в ландшафтном режиме:

android:screenOrientation="landscape"

Ответ 8

Что это! Долго ждать этого исправления.

У меня есть старая проблема с Android о двойном запуске действия, требующего (программно) ландшафтного режима: setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)

Теперь Android начнет использовать Ландшафтный режим.

Ответ 9

Арслан, почему вы хотите принудительно ориентировать ориентацию, хотя в манифесте уже есть способ <activity android:name=".youractivityName" android:screenOrientation="portrait" />

Ответ 10

Выполнение этого кода является ошибкой IMO и даже более того, если вы поместите его в onCreate. Сделайте это в манифесте, и "система" знает ориентацию с момента запуска приложения. И этот тип мета или верхнего уровня "руководство" ДОЛЖЕН быть в манифесте. Если вы хотите доказать это себе, сделайте перерыв в Activity onCreate. Если вы сделаете это в коде там, он будет вызываться дважды: он запускается в портретном режиме, затем переключается на Пейзаж. Это не происходит, если вы делаете это в манифесте.

Ответ 11

Это работает для Xamarin.Android. В OnCreate()

RequestedOrientation = Android.Content.PM.ScreenOrientation.Landscape;

Ответ 12

Для Android 4.0 (Ice Cream Sandwich), и позже мне нужно было добавить их, помимо значения landscape.

android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"

Использование только keyboardHidden|orientation все равно приведет к утечке памяти и восстановлению моих действий при нажатии кнопки питания.

Ответ 13

Используйте ActivityInfo (android.content.pm.ActivityInfo) в методе onCreate перед вызовом метода setLayout, подобного этому

this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

Ответ 14

Нажмите CTRL+F11, чтобы повернуть экран.