Android設定橫屏後鎖屏問題

2021-06-22 18:52:08 字數 2377 閱讀 7505

最近專案中,用到了橫屏。並且通過fragment做了tab頁效果。做ui的過程中ui展現沒有發現問題,但是今天上午,偶爾卻發現,當手機鎖屏時,我的fragment會銷毀掉,activity也會銷毀掉,並且fragment和activity會重啟。這個之前印象中,鎖屏只會onpause相違背。解決了一上午沒解決掉。坑娘啊~

首先,橫屏設定, 簡單在manifest檔案中通過activity標籤的 android:screenorientation="landscape"設定。

再來看看出現的問題,在logcat中列印的資訊。

2.問題來了,如果這個時候,按手機上的電源鍵,讓手機鎖屏,列印出來的生命週期方法很恐怖

可以看出,不是在onpause之後就停止了,而是銷毀,又重新建立了兩次fragment和activity。這個我就接受不了了,研究了一上午android手機鎖屏到底幹了些什麼東東。根骨太淺,木有研究明白。

3. 更恐怖的來了,當我們重新開啟之後,生命週期方法如下

activity和fragment再重新獲取焦點的時候,發現真個應用中多了好幾個fragment的物件。這是為什麼呢???????

首先上解決辦法:

在manifest檔案中,設定activity屬性  android:configchanges="orientation|screensize|keyboardhidden",當發生這些配置改變時不會重新oncreate。注意得有screensize

解決之後生命週期方法呼叫詳情:

1.第一次啟動獲取焦點

2.鎖屏

3.開屏

順眼多了~~

原因呢?從網上發現了如下資料:

==android 2.3以前的橫豎屏切換==

在android 2.3平台上,我們可以需要設定介面的橫豎屏顯示時,可以在androidmanifest.xml中,對activity的屬性新增以下**:

android:configchanges="orientation"

同時在activity中覆寫onconfigurationchanged方法

@override

public void onconfigurationchanged(configuration newconfig) {

super.onconfigurationchanged(newconfig);

log.i("tag","i'm android 2.3");

通過設定,當前activity在橫豎屏切換的時候,便不會重新走activity的生命週期,而是直接執行onconfigurationchanged()方法裡的內容。

==android 4.0以後的橫豎屏切換==

當我們在android 4.0上像之前那樣設定橫豎屏時,會發現竟然沒有效果,activity依然走自己的生命週期,這是因為在api level 13以後android做了修改了,sdk描述如下:

也就是說在android 3.2(api level 13)以後,當裝置橫豎屏切換時螢幕尺寸也改變了。因此,如果你想在api level 13或者更高的環境下,像以前那樣阻止裝置的橫豎屏切換,你需要在orientation後加上screensize。也就說你要像這樣宣告:android:configchanges="orientation|screensize"。

也就是說我們現在要在androidmanifest.xml中的activity加入以下屬性:

android:configchanges="orientation|screensize"

同時依然要在activity中覆寫onconfigurationchanged方法

@override

public void onconfigurationchanged(configuration newconfig) {

super.onconfigurationchanged(newconfig);

log.i("tag","i'm android 4.0");



Android之設定橫屏豎屏

方案一 在androidmanifest.xml中配置 在專案的androidmanifest.xml中找到你所指定的activity中加上android screenorientation屬性,它有以下幾個引數 unspecified 預設值 由系統來判斷顯示方向.判定的策略是和裝置相關的,所以不...

Android設定橫屏顯示

在開發 遊戲的時候,有些遊戲是只能橫屏玩的,所以手機豎立放置的時候,要保持遊戲畫面依然橫屏。遊戲開發之初最好就確定是用橫屏還是豎屏,如果容忍轉屏的話,不僅需要作兩種介面布局,而且橫豎屏切換很可能會記憶體溢位,導致程式崩潰。文 jackliao 要做到這個要求其實很簡單,在 android manif...

android 橫屏豎屏判斷

方法1 displaymetrics dm new displaymetrics getwindowmanager getdefaultdisplay getmetrics dm int width dm.widthpixels int height dm.heightpixels 方法2 if t...