簡體   English   中英

如何避免在 Android 上的方向更改時重新啟動活動

[英]How to avoid restarting activity when orientation changes on Android

我正在創建一個 Android 應用程序,在其中我在畫布上繪制視圖。 當設備的方向發生變化時,活動將重新啟動。 我不想這樣。

當方向改變時,如何避免重新啟動活動?

有多種方法可以做到這一點,但正如這里給出的,使用

android:configChanges="keyboardHidden|orientation|screenSize"

允許您偵聽配置更改。 然后通過覆蓋onConfigurationChanged並調用setContentView來響應這些更改。

這是我一直在做的方式,但我很想知道其他人的想法。

在 AndroidManifest.xml 中定義您的活動,如下所示:

   <activity
        android:name="com.name.SampleActivity"
        android:configChanges="keyboardHidden|orientation|screenSize"
        android:icon="@drawable/sample_icon"
        android:label="@string/sample_title"
        android:screenOrientation="portrait" >
    </activity>

檢查您已在活動上編寫android:configChanges="orientation"的 android 清單文件..

android:configChanges="keyboardHidden|orientation"到您的activity

我試圖在活動標簽中編寫android:configChanges="keyboardHidden|orientation|screenSize"但不起作用。

我嘗試了很多方法,但沒有任何效果,直到我為所有應用程序活動添加了android:configChanges="keyboardHidden|orientation|screenSize"並且它完美運行。

我建議使用 Fragments。 您可以簡單地使用setRetainInstance(true)來通知您要保留片段。

對於xamarin用戶,

為避免應用程序在 Android 中的方向更改時重新啟動,請添加此

ConfigurationChanges = Android.Content.PM.ConfigChanges.Orientation | Android.Content.PM.ConfigChanges.ScreenSize

到所有 Activity 類的 Activity 屬性。 例如,下面是我的演示代碼

    [Activity(Label = "DemoApp", ConfigurationChanges = Android.Content.PM.ConfigChanges.Orientation | Android.Content.PM.ConfigChanges.ScreenSize)]
    public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsApplicationActivity
    {
        protected override void OnCreate(Bundle bundle)
        {
        //Some code here
        }
    }

將此添加到清單中的所有活動。

android:configChanges="orientation|screenSize"

示例:

<activity android:name=".activity.ViewActivity"
        android:label="@string/app_name"
        android:configChanges="orientation|screenSize"/>

避免在keyboardHidden|orientation上重啟 - 如何在 Android 中禁用方向更改?
請遵循 Android API 指南 - 處理運行時更改
使用應用程序類 - Activity 在輪換 Android 上重新啟動

在你的 AndroidManifest.xml 中聲明

<activity android:name=".complex_examples.VideoPlayerActivity"
            android:configChanges="keyboard|keyboardHidden|orientation
                                  |screenSize|screenLayout|smallestScreenSize|uiMode"
            android:launchMode="singleTop"/>

但是請注意Android 開發人員文檔說只有在沒有更好的選擇時才應該這樣做。

注意:應避免使用此屬性,並且僅將其用作最后的手段。 請閱讀處理運行時更改以獲取有關如何正確處理由於配置更改而重新啟動的更多信息。

如果您確定這樣做,您可以在onConfigurationChanged()方法中自行處理配置更改。

停止破壞輪換活動

`android:configChanges="keyboardHidden|orientation|screenSize"`

只需為清單文件中的所有應用活動添加 android:configChanges="keyboardHidden|orientation|screenSize"

對我來說,當改變夜間模式時,只在清單中寫下這個:

android:configChanges="uiMode"

把它放在 AndroidManifest.xml 下

<activity android:name=".MainActivity"android:configChanges="orientation|screenSize">

請讓我知道它是否有效(它對我有用,我是 Android 工作室的新手)我在網上看到了這段代碼。

暫無
暫無

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

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