我正在尝试将活动锁定到横向模式,并且有一个覆盖活动接收并使用方向更改。顶部活动部分透明,因此底部活动锁定并正确显示非常重要。我尝试使用setRequestedOrientation()
和AndroidManifest.xml
android:screenOrientation="landscape"
当我使用清单锁定方向时,顶部活动也会锁定。当我添加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
是最底层的活动。如何正确处理方向更改,以便按照我设置的方式锁定单个活动?
答案 0 :(得分:3)
只需将screenOrientation添加到您不想在清单文件中的方向更改上旋转的活动,如下所示:
<activity android:name=".Activity"
android:screenOrientation="portrait" />
所有其他活动将自动轮换方向更改。 无需为其他活动提供screenOrientation。
答案 1 :(得分:0)
1)要禁用方向(即,如果用户翻转手机,以防止Android重新启动您的活动),请在AndroidManifest中指定“configChanges”(就像您已经在做的那样,显然),然后根本不这样做回应任何变化:
<activity android:name="MainActivity" android:configChanges="keyboardHidden|orientation|screenSize">
2)或者,假设你想强制你的应用程序采用“横向”模式。您可以指定“screenOrientation”
,而不是“configChanges”<activity android:screenOrientation="landscape" ... >
3)最后,如果你想要来处理方向改变,你需要a)保存状态,然后b)做你需要的任何处理(包括,或许,通知其他活动) :