[英]Android App orientation change restarts activity
我有一個活動,只要方向發生變化,它就會重新啟動。 我編寫了代碼來防止在清單文件中更改方向時重新啟動活動,如下所示:
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.sample.appname.MainActivity"
android:label="@string/app_name"
android:configChanges="orientation|keyboardHidden"
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
在上面的代碼片段中, android:configChanges =“orientation | keyboardHidden”應該為我做的工作,但活動仍在重啟。 請讓我知道如何糾正它。
實際上你不應該阻止重新啟動Activity。 由於多種原因,在輪換更改后重新創建活動是必要的。 其中之一是布局必須膨脹以處理改變的屏幕尺寸和類似的東西(很容易想象布局在縱向上完全不同於橫向模式)。 但是,有一種方法可以告訴系統您自己處理屏幕更改。 因此,更改清單中的行
android:configChanges="orientation|keyboardHidden"
至
android:configChanges="orientation|screenSize"
然后不會重新創建活動。 您將通過onConfigurationChanged()
方法獲得回調,以便在方向更改時執行某些操作。 如果您在配置更改時不想執行任何操作,請不要覆蓋Activity中的onConfigurationMethod()
。 有關詳細信息,請參閱Android開發者API指南中的此部分 。
我從這個答案得到了這個。 答案中還有兩種方法,但我認為上面描述的方法在您的情況下是最好的。
編輯:也許你必須添加keyboard|keyboardHidden
到android:configChanges
屬性,如在這個答案中所述
編輯#2:如果要檢索可以調用的設備的當前方向
Activity.getResources().getConfiguration().orientation
這將返回常量ORIENTATION_PORTRAIT
或ORIENTATION_LANDSCAPE
。
如果您對確切的旋轉角度感興趣,請使用
int rotation = getWindowManager().getDefaultDisplay().getRotation();
並通過這里描述的開關盒實現差異化。
確定設備旋轉的第三種方法是getRequestedOrientation()
,它將返回文檔中定義的常量
android:configChanges =“orientation | screenSize”表示無論何時更改屏幕方向,都會調用Activity類中的以下方法。
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if(newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { body }
}
這是andorid的本質,每當屏幕方向改變時,活動的整個生命周期再次運行。
保存和恢復某些數據。 你可以使用以下方法。
@Override
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
super.onSaveInstanceState(outState, outPersistentState);
outState.putString("key","value");
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
String s = savedInstanceState.getString("key");
}
嘗試改變
android:configChanges="orientation|keyboardHidden"
成
android:configChanges="orientation|screenSize"
這應該可以解決您的問題,但這不是一種有效的方法,更好的選擇請參考http://developer.android.com/training/basics/activity-lifecycle/recreating.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.