应用方向(横向或纵向)如何锁定?

时间:2010-04-18 18:39:44

标签: android screen-orientation

我尝试使用以下方法冻结方向:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

虽然显示屏保持纵向显示,但仍会重新创建活动。任何想法如何解决这个问题?

如何锁定应用程序的方向,以便在方向更改时不重新创建活动?

4 个答案:

答案 0 :(得分:40)

首先,如果可以避免,请不要使用setRequestedOrientation()。请改用android:screenOrientation清单元素中的<activity>属性。

其次,您的android:configChanges="keyboardHidden|orientation"清单元素中还需要<activity>以防止破坏/重新创建循环。

答案 1 :(得分:4)

AndroidManifest.xml的纵向方向活动部分的更具体示例:

    <activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:screenOrientation="portrait"
        android:configChanges="keyboardHidden|orientation|screenSize">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

android:screenOrientation设置初始方向,android:configChanges使屏幕上触发相应生命周期方法的事件无效。

答案 2 :(得分:3)

试试这个:

1.-在AndroidManifest.xml中设置所需的屏幕方向

android:screenOrientation="portrait|landscape"

它应该是这样的:

    <application
    android:allowBackup="true"
    android:icon="~icon path~"
    android:label="~name~"
    android:supportsRtl="true"
    android:screenOrientation="portrait"
    android:theme="@style/AppTheme">
    </application>

2.-将此添加到您的java活动文件中的onCreate void(或任何您想要的位置)(例如:“MainActivity.java”):

super.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);

它应该是这样的:

protected void onCreate(Bundle savedInstanceState) {
    super.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);}

现在即使屏幕旋转在设备中打开,屏幕也不会移动。

答案 3 :(得分:1)

最佳解决方案是使用已保存的实例。 如果您锁定屏幕方向,则表示您正在强制用户根据您设置的约束使用该应用程序。所以总是使用onSaveInstanceState。阅读此链接:http://developer.android.com/training/basics/activity-lifecycle/recreating.html