setRequestOrientation不锁定方向



我正试图将一个活动锁定到横向模式,并让覆盖的活动接收和使用方向更改。顶部活动是部分透明的,因此底部活动锁定并正确显示非常重要。我试着用setRequestedOrientation()编程设置它,并用android:screenOrientation="landscape"AndroidManifest.xml中设置它

当我使用清单锁定方向时,顶部活动也会锁定。当我添加android:configChanges="orientation|screenSize|keyboardHidden"时,顶部活动会改变方向,但底部活动也会改变方向。有时,在方向更改后,底部活动会完全变为空白(透明)。

这是在我的AndroidManifest.xml:中

<application
    android:debuggable="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".MainActivity"
        android:theme="@style/AppTheme"
        android:screenOrientation="landscape"
        android:configChanges="orientation|screenSize|keyboardHidden"
        android:label="@string/title_activity_main" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name=".TopActivity"
        android:screenOrientation="sensor"
        android:configChanges="orientation|screenSize|keyboardHidden"
        android:theme="@style/Theme.Transparent">
    </activity>
</application>

MainActivity是最底层的活动。如何正确处理方向更改,以便按照我设置的方式锁定单个活动?

只需将screenOrientation添加到您不想在清单文件中的方向更改时旋转的活动中,如下所示:

<activity android:name=".Activity" 
android:screenOrientation="portrait" />

所有其他活动将在方向更改时自动旋转。其他活动无需进行屏幕定向。

1)要禁用定向(即,如果用户翻转手机,阻止Android重新启动您的活动),然后在AndroidManifest中指定"configChanges"(显然就像您已经在做的那样),然后简单地不响应任何更改:

<activity android:name="MainActivity" android:configChanges="keyboardHidden|orientation|screenSize">

2) 或者,假设您想强制应用程序进入"横向"模式。您可以指定"screenOrientation",而不是"configChanges"

<activity android:screenOrientation="landscape" ... >

3) 最后,如果希望处理方向更改,则需要a)保存状态,然后b)执行所需的任何处理(可能包括通知其他活动):

  • http://developer.android.com/guide/topics/resources/runtime-changes.html

最新更新