我正试图将一个活动锁定到横向模式,并让覆盖的活动接收和使用方向更改。顶部活动是部分透明的,因此底部活动锁定并正确显示非常重要。我试着用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