0

我正在尝试将活动锁定为横向模式,并让上层活动接收并使用方向更改。顶部活动是部分透明的,因此底部活动锁定并正确显示非常重要。我试图以编程方式设置它 withsetRequestedOrientation()和 in the AndroidManifest.xmlwithandroid: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是底部活动。如何正确处理方向更改,以便按照我设置的方式锁定单个活动?

4

2 回答 2

3

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

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

所有其他活动将在方向更改时自动旋转。无需为其他活动提供 screenOrientation。

于 2012-09-11T09:21:44.990 回答
0

1)禁用方向(即防止Android在用户翻转手机时重新启动您的活动),然后在您的AndroidManifest中指定“configChanges”(显然就像您已经在做的那样),然后根本不响应任何变化:

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

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

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

3)最后,如果你处理方向变化,你需要 a)保存状态,然后 b)做你需要的任何处理(包括,也许,通知其他活动):

于 2012-09-10T22:03:22.283 回答