Android 屏幕橫豎切換詳解
Android 屏幕橫豎切換
Android 里面控制Activity的方向,只要在AndroidManifest.xml里面對應(yīng)的Activity節(jié)點下加一句
android:screenOrientation="landscape"(landscape是橫屏,portrait豎屏)。
我憑這句話混了一年,基本都可以的,但是這幾天我發(fā)現(xiàn)這招不是萬能的了。
項目里面有一個橫屏播放視頻的PlayAcitivity,我和之前一樣設(shè)置了android:screenOrientation="landscape"。到這邊都沒有問題,后來加了一個需求,點擊屏幕上面的”評論”按鈕,彈出一個對話框,這個對話框我是用Activity實現(xiàn)的。效果是:豎屏、評論界面占據(jù)屏幕的中間一塊,周圍是半透明的。
神奇的事情出現(xiàn)了,評論窗口彈出后,我發(fā)現(xiàn)后面的播放界面居然變成了豎屏。(因為上面說過,這個對話框只暫居了大半個屏幕,周圍透明,所以可以看見后面的界面PlayAcitivity)。
看見屏幕切換為豎屏了,我就郁悶了,我明明設(shè)置了android:screenOrientation="landscape",為什么還切換呢。
后來谷歌、百度… 也沒有找出原因來。自我理解是這樣的:雖然PlayAcitivity被遮住了,但是依然有一部分可見。而頂部窗口(對話框)是設(shè)置為android:screenOrientation="portrait"的,屏幕只有一個,肯定是根據(jù)頂部窗口的設(shè)置為準(zhǔn)。
Android中當(dāng)屏幕橫豎屏切換時,Activity的生命周期是重新加載(說明當(dāng)前的Activity給銷毀了,但又重新執(zhí)行加載),怎么使屏幕橫豎屏切換時,當(dāng)前的Activity不銷毀呢?
在AndroidManifest.xml中為Activity設(shè)置configChanges屬性.
configChanges有如下選項:
1. orientation :屏幕在縱向和橫向間旋轉(zhuǎn);
2. keyboardHidden:鍵盤顯示或隱藏;
3.fontScale: 用戶變更了首選的字體大小
4.locale: 用戶選擇了不同的語言設(shè)定;
5. keyboard: 鍵盤類型變更,例如手機從12鍵盤切換到全鍵盤
6. touchscreen或navigation: 鍵盤或?qū)Ш椒绞阶兓?/p>
如果缺少了keyboardHidden選項,不能防止Activity的銷毀,并且在之后提到的onConfigurationChanged事件中只能捕獲豎屏變橫屏的事件不能捕獲橫屏變豎屏。
android:onConfigurationChanged實際對應(yīng)的是Activity里的onConfigurationChanged()方法。在AndroidManifest.xml中添加上述代碼的含義是表示在改變屏幕方向、彈出軟件盤和隱藏軟鍵盤時,不再去執(zhí)行onCreate()方法,而是直接執(zhí)行onConfigurationChanged()。如果不申明此段代碼,按照Activity的生命周期,都會去執(zhí)行一次onCreate()方法,而onCreate()方法通常會在顯示之前做一些初始化工作。所以如果改變屏幕方向這樣的操作都去執(zhí)行onCreate()方法,就有可能造成重復(fù)的初始化,降低程序效率是必然的了,而且更有可能因為重復(fù)的初始化而導(dǎo)致數(shù)據(jù)的丟失。這是需要千萬避免的。
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
Android中利用Xposed框架實現(xiàn)攔截系統(tǒng)方法
這篇文章主要介紹了Android中利用Xposed框架實現(xiàn)攔截系統(tǒng)方法的相關(guān)資料,需要的朋友可以參考下2016-11-11Android布局(RelativeLayout、TableLayout等)使用方法
這篇文章主要介紹了Android布局使用方法及各種屬性介紹,包括RelativeLayout、TableLayout等,感興趣的朋友可以參考一下2016-03-03Android中activity處理返回結(jié)果的實現(xiàn)方式
這篇文章主要介紹了Android中activity處理返回結(jié)果的實現(xiàn)方式,為了實現(xiàn)這個功能,Android提供了一個機制,跳轉(zhuǎn)到其他activity時,再返回,可以接受到其他activity返回的值,無需再start新的當(dāng)前activity。需要的朋友可以參考下2016-12-12