Android切換橫豎屏不銷毀前台Activity,也不影響后台Activity


在切換屏幕方向的時候,Activity默認會走銷毀->重建的生命周期,而有時候我們不希望如此,就需要做些額外的設置了:

 

1、在AndroidMainifest.xml中對應的Activity標簽中加入android:configChanges="keyboardHidden|orientation|screenSize"屬性例:

1 <activity
2     android:name=".view.TestActivity"
3     android:configChanges="keyboardHidden|orientation|screenSize" />

這里是指定當keyboardHidden、orientation、screenSize這三種狀態發生改變時,由我們的程序進行處理,而不是走系統的銷毀->重建操作;另外,screenSize是在Api13+要求加上的;

 

2、重寫Activity的onConfigurationChanged方法,例:

 1 @Override
 2 public void onConfigurationChanged(Configuration newConfig) {
 3     super.onConfigurationChanged(newConfig);
 4     // 當前為橫屏
 5     if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
 6 
 7     }
 8     // 當前為豎屏
 9     else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
10 
11     }
12 }

在此方法中,我們可以根據前面設置的keyboardHidden、orientation、screenSize這三種狀態,判斷並執行想要的操作,當然什么都不做也可以;

 

就這兩步,問題已經解決了,每次切換屏幕方向將不會對Activity的生命周期造成影響,只會走onConfigurationChanged方法。但是!!!我碰到了個很神奇的東西:

Activity1跳轉到了Activity2,並且Activity2已經做了如上處理,當旋轉屏幕時,Activity2的確按照預想的執行,但是Log中怎么出現了Activity1的銷毀->重建,這提莫就想不通了,經過一番地毯式查找,終於發現原因在Activity2的Theme屬性中設置了<item name="android:windowIsTranslucent">true</item>,透明的Activity2導致了Activity1的重繪,所以去掉就好了,不知道這是不是windowIsTranslucent的一個bug,記得在其他地方好像也碰到過類似的后台Activity被重繪的問題,也是windowIsTranslucent的鍋。

 

閱讀原文


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM