IT之家 4 月 30 日消息,前幾天,vivo 首款折疊屏手機正式官宣,為讓開發(fā)者更好地適配新機型,vivo 團隊特推出了全新的適配指南。
vivo 折疊屏有展開態(tài)和折疊態(tài),這兩種狀態(tài)下屏幕的分辨率是不同的。因此,在折疊屏狀態(tài)切換時,分辨率也要動態(tài)切換。
如果 App 或 activity 不支持不同分辨率屏幕自動適配,則會存在一些顯示異常的問題,例如下圖所示的左右或下半屏存黑邊問題:
展開態(tài) ▼
折疊態(tài) ▼
適配建議
#01
讓應(yīng)用大小可調(diào)
為了加強用戶體驗,折疊屏在展開態(tài)和折疊態(tài)動態(tài)切換時,應(yīng)用界面不允許存在左右黑邊或下半屏黑邊的情況(即應(yīng)用進入兼容模式),因此需要應(yīng)用支持不同分辨率情況下頁面大小可調(diào)。
此功能由 android:resizeableActivity 屬性控制,在應(yīng)用的 AndroidManifest.xml 中可以針對 App 或 activity 進行設(shè)置。
<application android:resizeableActivity="true"> <activity android:resizeableActivity="true" /> </application>
Note:
1. 當應(yīng)用的 targetSdkVersion >=24 時,android 系統(tǒng)默認設(shè)置 android:resizeableActivity="true",不需要應(yīng)用聲明即可支持應(yīng)用大小可調(diào)。當應(yīng)用的 targetSdkVersion < 24 時,需要應(yīng)用針對 application 或 activity 設(shè)置 android:resizeableActivity="true"。
2. application android:resizeableActivity="true" 時,會針對 App 的所有 activity 生效,因此當應(yīng)用只需要聲明單獨的 activity 時,可以只針對單個 activity 進行設(shè)置。
系統(tǒng)側(cè)建議:針對 application 設(shè)置 android:resizeableActivity="true",避免應(yīng)用部分頁面在折疊屏狀態(tài)變化后存在黑邊問題。
其他適配事項可以參考 Android 開發(fā)者適配指導(dǎo) (例如鏈接中提到的保存界面狀態(tài)和支持配置變更部分):
https://developer.android.com/guide/topics/ui/foldables?hl=zh-cn
3.設(shè)置 android:resizeableActivity="true" 后,應(yīng)用即可進入分屏模式,若不想進入分屏模式(進入分屏模式后會有一些適配問題)又不被當做兼容模式,可以在 Activity 里加上如下代碼:
<meta-data android:name="android.supports_size_changes" android:value="true" />
#02
不同分辨率布局適配
折疊屏涉及到不同的分辨率尺寸和 DPI,應(yīng)用界面除了要保證分辨率切換時無黑邊問題外,還需要保證應(yīng)用界面在不同分辨率顯示時頁面無明顯的拉伸、錯位和重疊等問題,因此需要優(yōu)化布局和提供對應(yīng)的位圖來進行適配。
詳細適配方法可參考以下鏈接:
https://developer.android.com/training/multiscreen/screensizes?hl=zh-cn
#03
適配大屏體驗
在大屏適配時,部分顯示頁面僅僅只是放大,而沒有利用大屏的空間展示更多內(nèi)容。
因此,開發(fā)者們需要有效利用大屏空間調(diào)整布局展示,顯示更多的內(nèi)容。
要解決此類顯示問題,開發(fā)者們可以在 AndroidManifest.xml android:configChanges 中聲明 "screenSize" 變化,然后在 onConfigurationChanged 中動態(tài)調(diào)整布局。
詳細適配方法可以參考以下鏈接:
https://developer.android.com/guide/topics/resources/runtime-changes?hl=zh-cn
#04
判定折疊屏方法
運行時判斷:
android.util.FtDeviceInfo
public static String getDeviceType
返回的三種類型:phone、tablet 和 foldable
開發(fā)者可以通過反射的方式獲取設(shè)備類型,返回值 foldable 表示折疊屏設(shè)備。
反射代碼示例:
private static boolean isVivoFoldableDevice(){ try { Class<?> c= Class.forName("android.util.FtDeviceInfo"); Method m = c.getMethod("getDeviceType"); Object dType = m.invoke(c); Log.d("fold","getDeviceType="+dType); return "foldable".equals(dType); } catch (Exception e) { e.printStackTrace(); } return false; }
#05
機型配置
若應(yīng)用已經(jīng)針對其他廠家折疊屏設(shè)備進行了適配,新的折疊屏設(shè)備根據(jù)機型名配置即可生效,可直接配置 vivo 折疊屏 model 型號 V2178A。
調(diào)試和驗證
#01
手機調(diào)試
DPI 設(shè)置:adb shell wm density 480
展開態(tài):adb shell wm size 1916x2160
折疊態(tài):adb shell wm size 1080x2520
Note:
1. 折疊屏展開態(tài)和折疊態(tài) DPI 一樣都是 480,只需要設(shè)置一次
2. 展開態(tài)和折疊態(tài)進行切換時,可以通過設(shè)置不同的分辨率來進行模擬切換
3. 查看手機當前 DPI 和 size 的方法:adb shell wm density 和 adb shell wm size
4. DPI 和分辨率設(shè)置后,重啟手機設(shè)置不會發(fā)生變化,若需要調(diào)回手機默認值,可通過 adb shell wm size reset 和 adb shell wm density reset 進行恢復(fù)
5. 由于 Android 模擬器調(diào)試效率問題,推薦用手機模擬調(diào)試和驗證;若需要 100% 還原真機物理尺寸,可考慮模擬器
#02
模擬器調(diào)試
除了通過手機動態(tài)切換分辨率的方式來進行調(diào)試外,還可通過模擬器進行調(diào)試和驗證。Android Studio 模擬器 Phone 分類支持 8 英寸和 7.3 英寸的折疊屏調(diào)試,但是無法克?。礋o法修改模擬器的物理尺寸和分辨率)。
模擬器 System image 如果是 x86 的系統(tǒng),則只支持 32 位應(yīng)用的安裝和運行;如果是純 64 位的應(yīng)用,模擬器需要選擇 arm64-v8a,否則無法安裝和運行應(yīng)用。
Note:
1. Android Studio Foldable 模擬器無法修改物理尺寸、分辨率和 DPI,因此在適配時,無法完全模擬 vivo 折疊屏手機,在 App 或 activity resizeableActivity = true 時,為了驗證切屏是否有黑邊可以在 Android 原生模擬器查看效果。
2. 64 位模擬器需要 PC 主機支持,部分 PC 無法正常啟動 64 位模擬器。
#03
折疊屏展開態(tài)模擬器
Android 折疊屏模擬器無法修改物理尺寸、分辨率和 DPI。若應(yīng)用在進行《2.2 不同分辨率布局適配》時需要 100% 模擬折疊屏展開態(tài)的屏幕進行調(diào)試,可以通過克隆 Tablet 分類的 Nexus 10,然后修改 vivo 折疊屏手機對應(yīng)的物理尺寸、分辨率和 DPI 進行調(diào)試和驗證。
Note:
1. 應(yīng)用 UI 兼容性適配對物理尺寸有強關(guān)聯(lián)時,請務(wù)必修改 Screen size 為 8.03,分辨率是展開態(tài)分辨率
2. 需確認 64 位模擬器是否可以運行需要 PC 主機支持
3. 若手機模擬 DPI 和分辨率調(diào)試無問題后,無法在模擬器運行,可以發(fā)包給 vivo 接口人,在 vivo 折疊屏真機運行點檢
4. 模擬器無法修改 DPI,需要啟動模擬器后,通過 adb shell 命令設(shè)置
此時打開終端,可以看到模擬器設(shè)備已經(jīng)掛載和連接,可以進行 adb 操作。
λ adb devices List of devices attached emulator-5554 device
模擬器無法直接修改 DPI,需要啟動模擬器后單獨設(shè)置。
adb shell wm density 480
廣告聲明:文內(nèi)含有的對外跳轉(zhuǎn)鏈接(包括不限于超鏈接、二維碼、口令等形式),用于傳遞更多信息,節(jié)省甄選時間,結(jié)果僅供參考,IT之家所有文章均包含本聲明。