最近各大廠商都出現了摺疊屏手機,就在下月華爲mateX摺疊屏即將上市,華爲SGA羣裏的小姐姐不停的催我們去適配。
emmm ~~這個挺重要,給適配了,但是中間爬過了一個坑,關於這個問題我們會在具體步驟中說一下,我們先看一下文檔中的內容
目錄
配置參數
文檔我已經上傳了可以在我的資源中找到
這個是文檔的基本信息,第一版本
在這裏我們只說一下具體的代碼部署,至於UI尺寸、界面排版策略、以及界面的狀態欄等文檔中有的問題,大家可以下載一下這個文檔,看一下更詳細的信息,這裏就不一一敘述:
我們的首先要解決的問題是當屏幕的項目發生改變時,activity的生命週期不會重新走,所以我們要進行一系列的配置
1、在應用界面能夠不同的屏幕尺寸下鋪滿全屏顯示,且響應佈局和操作按鍵功能正常
<application android:resizeableActivity=["true" | "false"] />
2、申請最大比例與最小比例
<activity android:maxAspectRatio="2.4" android:minAspectRatio="1.0">
maxAspectRatio 在7.1之後的版本中需要在Activity中設置,建議2.4,可以適配最大比例
minAspectRatio在Q版本(1.0)開始,在activity中設置,可以鋪滿屏幕
要強調的一點,如果在activity中設置minAspectRatio,需要目標版本targetSdkVersion最小爲29
android {
defaultConfig {
targetSdkVersion 29
}
}
maxAspectRatio需要目標版本最小爲26,不過爲了適配1.0的minAspectRatio屬性,最好直接用29
其他版本需要在application中使用<mate-data>標籤設置
<application> <!--Android 7.1 及以下版本,在 manifest 文件的<application>節點中增加 <meta-data> android.max_aspect數據,設置最大支持比例: https://blog.csdn.net/QQ729533020/article/details/99740128 適配摺疊屏 2.4爲最大支持比例 可在摺疊屏展開狀態下鋪滿 注:之前值爲2.1 暫時直接改爲2.4 出現問題適配問題時另說。 2.4 可用於大部分屏幕--> <meta-data android:name="android.max_aspect" android:value="2.4" /> <!-- Q 之前版本:在 manifest 文件的 <application>節點中增加 <meta-data>數據,設置最小支持比例(聲明爲 1.0 即表示在展開態大屏下滿屏顯示) https://blog.csdn.net/QQ729533020/article/details/99740128 適配摺疊屏--> <meta-data android:name="android.min_aspect" android:value="1.0" /> </application>
雖然安卓提供了申請受限屏幕能力,還是強烈建議您設計resizeable能力,一旦 您申明瞭受限屏幕比例(最大或最小)這意味着,當您的app運行在一個屏幕比例超出了您 申明的範圍,您的應用程序在屏幕上將出現黑邊等現象。
3、接下來就是最重要的一步 configchanges的配置(這將禁止頁面重走生命週期,如果需要重新走,請直接看第四步)
摺疊展開的動作,會觸發對smallestscreensize、screensize和screenlayout的配置更改。每 當發生配置更改時,默認情況下會銷燬並重新創建整個activity。
<activity android:configChanges="screenSize|smallestScreenSize|screenLayout" />
以上是官方給出的幾個參數,但是會有一些特殊的,容易忽略的情況,就是你會發現你設置了以上屬性時,當屏幕分辨路發生變化,activity生命週期仍然會重新走一遍,大概率引發空指針錯誤,這是我在適配的時候遇到的遇到的一個坑(我用的是華爲mate10 通過adb命令測試的)!
於是我又加上了幾個參數
android:configChanges="keyboardHidden|orientation|screenSize|smallestScreenSize|screenLayout|fontScale|touchscreen"
以上是我的配置,需要提醒大家的是,因爲開發過程中可能會因爲自己的某些配置,導致在屏幕分辨率發生變化的時候,會出發觸摸事件以及字體變化等,需要大家自己去摸索着裏面的參數,如果以上參數還不起作用,可以繼續添加參數
“mcc“ 移動國家號碼,由三位數字組成,每個國家都有自己獨立的MCC,可以識別手機用戶所屬國家。
“mnc“ 移動網號,在一個國家或者地區中,用於區分手機用戶的服務商。
“locale“ 所在地區發生變化。
“touchscreen“ 觸摸屏已經改變。(這不應該常發生。)
“keyboard“ 鍵盤模式發生變化,例如:用戶接入外部鍵盤輸入。
“keyboardHidden“ 用戶打開手機硬件鍵盤
“navigation“ 導航型發生了變化。(這不應該常發生。)
“orientation“ 設備旋轉,橫向顯示和豎向顯示模式切換。
“fontScale“ 全局字體大小縮放發生改變
給大家推薦一個鏈接 android:configChanges屬性總結 ,裏面有每個屬性具體的解釋
ok,設置的差不多了,然後就是需要在屏幕分辨率發生變化的時候,進行一系列操作,需要重寫 onConfigurationChanged() 方法,通過該方法的 Configuration 參數獲得 屏幕的分辨率等信息,就可以針對不同比例屏幕下的應用界面佈局做相應調整,如切換佈局、調整控件位置和間距等。這個方法在Activity以及Fragment中都會有。
4、如果應用必須進行重新走生命週期來以響應屏幕切換,需要進行狀態的保存和恢 復。
可以通過OnSaveInstanceState()和ViewModel對象來進行之前狀態保存和後續的恢 復。即,在銷燬activity之前,通過onSaveInstancesState()存儲狀態, 在onCreate() or onRestoreInstanceState()進行狀態的恢復。
文檔中也強調了
Note:不要在OnDestroy()中調用finish()或其他自行終止進程。這將導致應用程序在設備摺疊或展開時關閉、閃退等問題。
關於多窗口開發這裏簡單的說一下幾個問題,詳細的大家可以看文檔,裏面有介紹
Android的多窗口開發指導(可以點擊下載)
1、正確處理應用的橫豎屏
其實“豎屏”真正的意義僅僅是高度大於寬度,“橫屏”的意義是寬度大於高度。2、所以從這個定義來考慮,在應用調整大小時,可能會從一個朝向轉到另一個朝向就 說得通了。
在多窗口模式下在運行時鎖定朝向的
➡️setRequestedOrientation()、android:screenOrientation()方法都是無效的。
2、正確處理Activity的Pause狀態
Q版本之前,手機系統中只有一個resumed activity,一個focus activity,用戶仍可以看
到處於pause狀態的應用,應用在暫停狀態下可能仍需要繼續操作。例如處於pause狀態但 可見的視頻應用應繼續播放。
Q版本後,Android允許multi resumed activity出現,並不是僅有一個resumed activity。
接下來就是最最重要的調測工具目前 實體機還沒上市,但是從Android Studio 3.5 Canary版本開始,開發者可創建一個運行Q Beta 2版本的摺疊屏虛擬設 備,其支持的硬件配置分別爲7.3英寸(摺疊後爲4.6英寸),以及8英寸(摺疊後爲6.6英寸)。 建議開發者選擇8英寸的設備來模擬適配華爲的MateX摺疊屏手機(備註:Android Studio 3.5 Canary版本下載地址)
如果不想這麼麻煩的去更新我們的開發工具,可以使用adb命令去更改我們的手機的像素達到模擬摺疊屏像素的改變的過程,
需要注意一點, 有直接去恢復像素的adb命令,但是可能會引起手機字體大小的改變,重啓機器也無法改變。
怎麼辦呢?大家先看一下手機的設置 ➡️ 顯示 ➡️ 屏幕分辨率,可不可以改變手機分辨率,如果有的話,如果adb reset 命令沒有恢復字體大小,可以在這兒去切換一下分辨率,在切換回來,字體大小就恢復了
通過命令模擬調試
開發者也可以在非摺疊屏手機上面通過命令修改手機的屏幕分辨率來進行模擬調試:
1. 摺疊切展開模擬方法:
1) 預先將手機設置主屏分辨率:
adb shell wm size 1148x2480
2) 通過修改手機分辨率爲全屏分辨率模擬狀態切換:
adb shell wm size 2200x2480
2. 展開切摺疊模擬方法:
1) 預先將手機設置全屏分辨率:
adb shell wm size 2200x2480
2) 通過修改手機分辨率爲主屏分辨率模擬狀態切換:adb shell wm size 1148x2480
3. 分辨率恢復方法:adb shell wm size reset
喜歡就點個贊吧~😁