vivo X Fold 摺疊屏適配官方指南釋出:應用大小可調、不同解析度佈局、大屏體驗
4 月 30 日訊息,前幾天,vivo 首款摺疊屏手機正式官宣,為讓開發者更好地適配新機型,vivo 團隊特推出了全新的適配指南。
vivo 摺疊屏有展開態和摺疊態,這兩種狀態下螢幕的解析度是不同的。因此,在摺疊屏狀態切換時,解析度也要動態切換。
如果 App 或 activity 不支援不同解析度螢幕自動適配,則會存在一些顯示異常的問題,例如下圖所示的左右或下半屏存黑邊問題:
展開態 ▼
摺疊態 ▼
適配建議
#01
讓應用大小可調
為了加強使用者體驗,摺疊屏在展開態和摺疊態動態切換時,應用介面不允許存在左右黑邊或下半屏黑邊的情況(即應用進入相容模式),因此需要應用支援不同解析度情況下頁面大小可調。
此功能由 android:resizeableActivity 屬性控制,在應用的 AndroidManifest.xml 中可以針對 App 或 activity 進行設定。
<applicationandroid:resizeableActivity="true"><activityandroid:resizeableActivity="true"/></application>
Note:
1. 當應用的 targetSdkVersion >=24 時,android 系統預設設定 android:resizeableActivity="true",不需要應用宣告即可支援應用大小可調。當應用的 targetSdkVersion < 24 時,需要應用針對 application 或 activity 設定 android:resizeableActivity="true"。
2. application android:resizeableActivity="true" 時,會針對 App 的所有 activity 生效,因此當應用只需要宣告單獨的 activity 時,可以只針對單個 activity 進行設定。
系統側建議:針對 application 設定 android:resizeableActivity="true",避免應用部分頁面在摺疊屏狀態變化後存在黑邊問題。
其他適配事項可以參考 Android 開發者適配指導 (例如連結中提到的儲存介面狀態和支援配置變更部分):
https://developer.android.com/guide/topics/ui/foldables?hl=zh-cn
3.設定 android:resizeableActivity="true" 後,應用即可進入分屏模式,若不想進入分屏模式(進入分屏模式後會有一些適配問題)又不被當做相容模式,可以在 Activity 里加上如下程式碼:
<meta-dataandroid:name="android.supports_size_changes"android:value="true"/>
#02
不同解析度佈局適配
摺疊屏涉及到不同的解析度尺寸和 DPI,應用介面除了要保證解析度切換時無黑邊問題外,還需要保證應用介面在不同解析度顯示時頁面無明顯的拉伸、錯位和重疊等問題,因此需要優化佈局和提供對應的點陣圖來進行適配。
詳細適配方法可參考以下連結:
https://developer.android.com/training/multiscreen/screensizes?hl=zh-cn
#03
適配大屏體驗
在大屏適配時,部分顯示頁面僅僅只是放大,而沒有利用大屏的空間展示更多內容。
因此,開發者們需要有效利用大屏空間調整佈局展示,顯示更多的內容。
要解決此類顯示問題,開發者們可以在 AndroidManifest.xml android:configChanges 中宣告 "screenSize" 變化,然後在 onConfigurationChanged 中動態調整佈局。
詳細適配方法可以參考以下連結:
https://developer.android.com/guide/topics/resources/runtime-changes?hl=zh-cn
#04
判定摺疊屏方法
執行時判斷:
android.util.FtDeviceInfo
public static String getDeviceType
返回的三種類型:phone、tablet 和 foldable
開發者可以通過反射的方式獲取裝置型別,返回值 foldable 表示摺疊屏裝置。
反射程式碼示例:
privatestaticbooleanisVivoFoldableDevice(){try{Class<?>c=Class.forName("android.util.FtDeviceInfo");Methodm=c.getMethod("getDeviceType");ObjectdType=m.invoke(c);Log.d("fold","getDeviceType="+dType);return"foldable".equals(dType);}catch(Exceptione){e.printStackTrace();}returnfalse;}
#05
機型配置
若應用已經針對其他廠家摺疊屏裝置進行了適配,新的摺疊屏裝置根據機型名配置即可生效,可直接配置 vivo 摺疊屏 model 型號 V2178A。
除錯和驗證
#01
手機除錯
DPI 設定:adbshell wm density 480
展開態:adb shell wm size 1916x2160
摺疊態:adb shell wm size 1080x2520
Note:
1. 摺疊屏展開態和摺疊態 DPI 一樣都是 480,只需要設定一次
2. 展開態和摺疊態進行切換時,可以通過設定不同的解析度來進行模擬切換
3.檢視手機當前 DPI 和 size 的方法:adb shell wm density 和 adb shell wm size
4. DPI 和解析度設定後,重啟手機設定不會發生變化,若需要調回手機預設值,可通過 adb shell wm size reset 和 adb shell wm density reset 進行恢復
5. 由於 Android 模擬器除錯效率問題,推薦用手機模擬除錯和驗證;若需要 100% 還原真機物理尺寸,可考慮模擬器
#02
模擬器除錯
除了通過手機動態切換解析度的方式來進行除錯外,還可通過模擬器進行除錯和驗證。Android Studio 模擬器 Phone 分類支援 8 英寸和 7.3 英寸的摺疊屏除錯,但是無法克隆(即無法修改模擬器的物理尺寸和解析度)。
模擬器 System image 如果是 x86 的系統,則只支援 32 位應用的安裝和執行;如果是純 64 位的應用,模擬器需要選擇 arm64-v8a,否則無法安裝和執行應用。
Note:
1.Android Studio Foldable 模擬器無法修改物理尺寸、解析度和 DPI,因此在適配時,無法完全模擬 vivo 摺疊屏手機,在 App 或 activity resizeableActivity = true 時,為了驗證切屏是否有黑邊可以在 Android 原生模擬器檢視效果。
2. 64 位模擬器需要 PC 主機支援,部分 PC 無法正常啟動 64 位模擬器。
#03
摺疊屏展開態模擬器
Android 摺疊屏模擬器無法修改物理尺寸、解析度和 DPI。若應用在進行《2.2 不同解析度佈局適配》時需要 100% 模擬摺疊屏展開態的螢幕進行除錯,可以通過克隆 Tablet 分類的 Nexus 10,然後修改 vivo 摺疊屏手機對應的物理尺寸、解析度和 DPI 進行除錯和驗證。
Note:
1. 應用 UI 相容性適配對物理尺寸有強關聯時,請務必修改 Screen size 為 8.03,解析度是展開態解析度
2. 需確認 64 位模擬器是否可以執行需要 PC 主機支援
3. 若手機模擬 DPI 和解析度除錯無問題後,無法在模擬器執行,可以發包給 vivo 介面人,在 vivo 摺疊屏真機執行點檢
4. 模擬器無法修改 DPI,需要啟動模擬器後,通過 adb shell 命令設定
此時開啟終端,可以看到模擬器裝置已經掛載和連線,可以進行 adb 操作。
λadbdevicesListofdevicesattachedemulator-5554device
模擬器無法直接修改 DPI,需要啟動模擬器後單獨設定。
adbshellwmdensity480