Как заблокирована ориентация приложения (альбомная или книжная)? - PullRequest
13 голосов
/ 18 апреля 2010

Я пытался заморозить ориентацию, используя:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

Хотя дисплей остается в портретной ориентации, действие все еще воссоздается. Есть идеи как это решить?

Как можно заблокировать ориентацию приложения, чтобы при смене ориентации действие не воссоздавалось?

Ответы [ 4 ]

40 голосов
/ 18 апреля 2010

Во-первых, не используйте setRequestedOrientation(), если вы можете избежать этого. Вместо этого используйте атрибут android:screenOrientation в элементе манифеста <activity>.

Во-вторых, вам также понадобится android:configChanges="keyboardHidden|orientation" в элементе манифеста <activity>, чтобы предотвратить цикл уничтожения / воссоздания.

4 голосов
/ 13 августа 2014

Более конкретный пример раздела активности в AndroidManifest.xml для портретной ориентации:

    <activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:screenOrientation="portrait"
        android:configChanges="keyboardHidden|orientation|screenSize">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

Где android:screenOrientation устанавливает начальную ориентацию, а android:configChanges аннулирует события, вызывающие соответствующие методы жизненного цикла.на экране изменения.

3 голосов
/ 08 сентября 2016

Попробуйте это:

1.- Установите желаемую ориентацию экрана в вашем AndroidManifest.xml

android:screenOrientation="portrait|landscape"

Это должно выглядеть так:

    <application
    android:allowBackup="true"
    android:icon="~icon path~"
    android:label="~name~"
    android:supportsRtl="true"
    android:screenOrientation="portrait"
    android:theme="@style/AppTheme">
    </application>

2.- Добавьте это в свой onCreate void (или куда хотите) в файле активности Java (пример: «MainActivity.java»):

super.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);

Это должно выглядеть так:

protected void onCreate(Bundle savedInstanceState) {
    super.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);}

Теперь экран не будет двигаться, даже если в устройстве включена функция поворота экрана.

1 голос
/ 15 марта 2013

Лучшее решение - использовать сохраненный экземпляр. Если вы блокируете ориентацию экрана, это означает, что вы заставляете пользователя использовать приложение в соответствии с установленными вами ограничениями. Поэтому всегда используйте onSaveInstanceState. Прочитайте эту ссылку: http://developer.android.com/training/basics/activity-lifecycle/recreating.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...