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

13

我尝试使用以下代码锁定屏幕方向:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

虽然显示保持纵向方向,但活动仍然会被重新创建。有什么解决方法吗?

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

4个回答

41

首先,如果可能的话请不要使用 setRequestedOrientation() 方法。相反,应该在你的<activity>清单元素中使用 android:screenOrientation 属性。

其次,你还需要在<activity>的清单元素中添加 android:configChanges="keyboardHidden|orientation" 属性,以防止销毁和重建周期。


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则忽略屏幕变化触发相应的生命周期方法。


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活动文件(例如:"MainActivity.java")的onCreate方法中:

super.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);

应该看起来像这样:

它应该长得像这样:

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

现在,即使设备的屏幕旋转功能已经开启,屏幕也不会移动。

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接