Заставить активность Android всегда использовать альбомный режим - PullRequest
132 голосов
/ 28 января 2010

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

Ответы [ 14 ]

179 голосов
/ 28 января 2010

Просмотр 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">

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

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

114 голосов
/ 28 января 2010

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

myActivity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

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

39 голосов
/ 22 апреля 2012

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

this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
31 голосов
/ 28 января 2010

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

<activity android:allowTaskReparenting=["true" | "false"]
...
          android:screenOrientation=["unspecified" | "user" | "behind" |
                                     "landscape" | "portrait" |
                                     "sensor" | "nosensor"]
...
                                       "adjustResize", "adjustPan"] >  
19 голосов
/ 25 января 2016

В манифесте:

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

В вашей деятельности:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
setContentView(R.layout.your_activity_layout);
10 голосов
/ 11 октября 2011

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

<activity android:screenOrientation="landscape"
          android:configChanges="orientation|keyboardHidden"
          android:name="abcActivty"/>
7 голосов
/ 16 марта 2015

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

android:screenOrientation="landscape"
5 голосов
/ 24 августа 2016

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

RequestedOrientation = Android.Content.PM.ScreenOrientation.Landscape;
4 голосов
/ 12 сентября 2012

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

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

Теперь Android запускает ландшафтный режим при запуске.

3 голосов
/ 25 января 2011

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

...