Android: предотвращение изменения ориентации экрана, но уведомление об этом - PullRequest
4 голосов
/ 26 февраля 2012

Мне нужно сохранить макет своей активности в портретном режиме, но все равно получать уведомления при изменении ориентации экрана, чтобы обновить свой пользовательский холст.Мне удалось предотвратить перезапуск ОС Android и изменение макета при изменении ориентации экрана, добавив в свой манифест XML следующие строки:

android:screenOrientation="portrait"
android:configChanges="orientation"

Я также знаю, что могу изменитьориентация экрана программно путем вызова метода setRequestedOrientation из Activity.

Проблема в том, что метод onConfigurationChanged вообще не вызывается, когда я устанавливаю флаг screenOrientation или вызываю метод setRequestedOrientation.Он вызывается, когда я удаляю флаг из манифеста, но затем также обновляется компоновка, что не то, что я хочу.

Есть ли способ, как предотвратить изменение макетов в ОС, но при этом иметь возможностьпоймать изменение конфигурации?

Спасибо!

Ответы [ 2 ]

4 голосов
/ 26 февраля 2012

Надеюсь этот класс решит вашу проблему.

1 голос
/ 08 июня 2012

У меня была такая же проблема.Что помогло мне, так это добавить одно слово в мой основной XML-файл:

keyboardHidden

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

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="pl.chris.mypicture"
   android:versionCode="1"
   android:versionName="1.0"
    >

    <uses-sdk android:minSdkVersion="10" />

    <application
       android:icon="@drawable/ic_launcher"
       android:label="@string/app_name" >
        <activity
           android:name=".MyPictureActivity"
           android:label="@string/app_name"
           android:configChanges="orientation|keyboardHidden"
           android:screenOrientation="portrait" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
...