13

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

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

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

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

4

4 回答 4

41

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

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

于 2010-04-18T19:25:54.550 回答
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>

Whereandroid:screenOrientation设置初始方向并android:configChanges取消在屏幕更改上触发相应生命周期方法的事件。

于 2014-08-12T22:16:13.267 回答
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 Activity 文件中的 onCreate void(或任何您想要的位置)(例如:“MainActivity.java”):

super.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);

它应该如下所示:

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

Now the screen wont move even if the Screen Rotation is on in the Device.

于 2016-09-08T15:07:36.717 回答
1

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

于 2013-03-15T03:08:43.083 回答