setRequestedOrientation不会锁定方向

时间:2012-09-10 21:55:23

标签: android

我正在尝试将活动锁定到横向模式,并且有一个覆盖活动接收并使用方向更改。顶部活动部分透明,因此底部活动锁定并正确显示非常重要。我尝试使用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是最底层的活动。如何正确处理方向更改,以便按照我设置的方式锁定单个活动?

2 个答案:

答案 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)做你需要的任何处理(包括,或许,通知其他活动) :