簡體   English   中英

方向更改時重新啟動android活動

[英]android activity restarted when orientation changes

我閱讀了很多關於這個問題的帖子,比如[this link] [1],一個解決方案是添加方向configChanges來清單和處理onConfigurationChanged事件,以防止在旋轉時再次調用onCreate活動。 我做了它並且事件被正確觸發,但是,在執行之后,onCreate方法也被執行了! 為什么? 我錯過了什么? 謝謝

表現,

<activity 
            android:name="webPush"
            android:configChanges="keyboardHidden|orientation"/>

活動,

@Override
    public void onConfigurationChanged(Configuration newConfig) {
      super.onConfigurationChanged(newConfig);
      setContentView(R.layout.vistaaib);
    }

@Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.vistaaib);
...

我想這會起作用.........

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

從Android 3.2(API級別13)開始,當設備在縱向和橫向之間切換時,“屏幕尺寸”也會改變。 因此,如果要在開發API級別13或更高級別時因為方向更改而阻止運行時重新啟動,則必須使用

android:configChanges="orientation|screenSize"

我做到了 我將此代碼添加到清單中,它完美無缺。

<activity
        android:name="?"
        android:label="@string/?"
        android:theme="@style/?" 
        android:configChanges="orientation|screenSize">

如果要在設備旋轉時更改某些內容,則需要在活動下添加此項。

public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);

    // Checks the orientation of the screen
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
        Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
    }
}

在該Activity中的manifest文件中寫下這兩行代碼。

似乎這將解決您的問題。 <activity android:name=".YourActivity" android:configChanges="orientation|keyboardHidden"/>

您的活動將在任何配置更改時重新啟動。 最有可能是因為鍵盤狀態發生變化而重新啟動。 嘗試將此添加到活動的屬性:

android:configChanges="orientation|keyboard|keyboardHidden"

如果您的API級別為12或更低

在menifest文件中,在聲明您的活動名稱后立即放入以下內容。

    android:configChanges="orientation"

例如-

    <activity
        android:name=".NameOfYourActivity"
        android:configChanges="orientation"/>

而在Android 3.2(API級別13)或更高版本的屏幕大小也會隨着輪換的變化而改變,所以也要聲明這一點。

為了這,

    android:configChanges="orientation|screenSize"

以下可能是原因

事件:screenSize

當前可用的屏幕大小已更改。 這表示當前可用大小相對於當前寬高比的變化,因此當用戶在橫向和縱向之間切換時會發生變化。 但是,如果您的應用程序的目標是API級別12或更低,那么您的活動始終會自行處理此配置更改(即使在Android 3.2或更高版本的設備上運行,此配置更改也不會重新啟動您的活動)。 在API級別13中添加。

所以除了“orientation”之外,還要添加“screenSize”

暫無
暫無

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

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