【问题标题】:How is application orientation (landscape or portrait) locked?如何锁定应用程序方向(横向或纵向)?
【发布时间】:2010-04-18 18:39:44
【问题描述】:

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

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

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

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

【问题讨论】:

    标签: android screen-orientation


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      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 Activity 文件中的 onCreate void(或您想要的任何位置)(示例:“MainActivity.java”):

        super.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);
        

        应该是这样的:

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

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 2015-05-18
            • 2011-04-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多