Android 螢幕橫豎切換
Android 裡面控制Activity的方向,只要在AndroidManifest.xml裡面對應的Activity節點下加一句
android:screenOrientation="landscape"(landscape是橫屏,portrait豎屏)。
我憑這句話混了一年,基本都可以的,但是這幾天我發現這招不是萬能的了。
項目裡面有一個橫屏播放視頻的PlayAcitivity,我和之前一樣設定了android:screenOrientation="landscape"。到這邊都沒有問題,後來加了一個需求,點擊螢幕上面的”評論”按鈕,彈出一個對話方塊,這個對話方塊我是用Activity實現的。效果是:豎屏、評論介面佔據螢幕的中間一塊,周圍是半透明的。
神奇的事情出現了,評論視窗彈出後,我發現後面的播放介面居然變成了豎屏。(因為上面說過,這個對話方塊只暫居了大半個螢幕,周圍透明,所以可以看見後面的介面PlayAcitivity)。
看見螢幕切換為豎屏了,我就鬱悶了,我明明設定了android:screenOrientation="landscape",為什麼還切換呢。
後來Google、百度… 也沒有找出原因來。自我理解是這樣的:雖然PlayAcitivity被遮住了,但是依然有一部分可見。而頂部視窗(對話方塊)是設定為android:screenOrientation="portrait"的,螢幕只有一個,肯定是根據頂部視窗的設定為準。
Android中當螢幕橫豎屏切換時,Activity的生命週期是重新載入(說明當前的Activity給銷毀了,但又重新執行載入),怎麼使螢幕橫豎屏切換時,當前的Activity不銷毀呢?
在AndroidManifest.xml中為Activity設定configChanges屬性.
configChanges有如下選項:
1. orientation :螢幕在縱向和橫向間旋轉;
2. keyboardHidden:鍵盤顯示或隱藏;
3.fontScale: 使用者變更了首選的字型大小
4.locale: 使用者選擇了不同的語言設定;
5. keyboard: 鍵盤類型變更,例如手機從12鍵盤切換到全鍵盤
6. touchscreen或navigation: 鍵盤或導航方式變化,
如果缺少了keyboardHidden選項,不能防止Activity的銷毀,並且在之後提到的onConfigurationChanged事件中只能捕獲豎屏變橫屏的事件不能捕獲橫屏變豎屏。
android:onConfigurationChanged實際對應的是Activity裡的onConfigurationChanged()方法。在AndroidManifest.xml中添加上述代碼的含義是表示在改變螢幕方向、彈出軟體盤和隱藏軟鍵盤時,不再去執行onCreate()方法,而是直接執行onConfigurationChanged()。如果不申明此段代碼,按照Activity的生命週期,都會去執行一次onCreate()方法,而onCreate()方法通常會在顯示之前做一些初始化工作。所以如果改變螢幕方向這樣的操作都去執行onCreate()方法,就有可能造成重複的初始化,降低程式效率是必然的了,而且更有可能因為重複的初始化而導致資料的丟失。這是需要千萬避免的。
感謝閱讀,希望能協助到大家,謝謝大家對本站的支援!