簡體   English   中英

如何鎖定應用程序方向(橫向或縱向)?

[英]How is application orientation (landscape or portrait) locked?

我嘗試使用以下方法凍結方向:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

盡管顯示保持縱向,但仍會重新創建活動。 任何想法如何解決這個問題?

如何鎖定應用程序的方向,以便在方向更改時不重新創建活動?

首先,如果可以避免,請不要使用setRequestedOrientation() 請在<activity>清單元素中使用android:screenOrientation屬性。

其次,您還需要在<activity>清單元素中使用android:configChanges="keyboardHidden|orientation"來防止破壞/重新創建周期。

面向肖像的AndroidManifest.xml的Activity部分的一個更具體的示例:

    <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使觸發屏幕更改上相應生命周期方法的事件android:configChanges

嘗試這個:

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 void(或任意位置)中:

super.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED);

它看起來應該像這樣:

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

現在,即使設備中的“屏幕旋轉”處於打開狀態,屏幕也不會移動。

最好的解決方案是使用保存的實例。 如果您鎖定屏幕方向,則意味着您要強迫用戶根據您設置的約束使用該應用程序。 因此,請始終使用onSaveInstanceState。 閱讀此鏈接: http : //developer.android.com/training/basics/activity-lifecycle/recreating.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM