本文介紹了廠商對(duì)適配折疊屏的要求及解決方案。
本文首發(fā):http://yuweiguocn.github.io/
《春日》
勝日尋芳泗水濱,無(wú)邊光景一時(shí)新。
等閑識(shí)得東風(fēng)面,萬(wàn)紫千紅總是春。
-宋代,朱熹
前言
前一段時(shí)間折疊屏手機(jī)炒的很火,三星和華為也提供了折疊屏適配方案指導(dǎo)。三星對(duì)應(yīng)用的要求有3點(diǎn):1.保證頁(yè)面連續(xù)性;2.保證頁(yè)面UI無(wú)明顯異常;3.支持多窗口功能。
保證頁(yè)面連續(xù)性
三星折疊屏手機(jī)在開(kāi)發(fā)者選項(xiàng)中提供了一個(gè)選項(xiàng):在正面屏幕上繼續(xù)使用應(yīng)用程序->找到你的應(yīng)用開(kāi)啟選項(xiàng),可以讓?xiě)?yīng)用在手機(jī)折疊狀態(tài)發(fā)生改變后保持頁(yè)面顯示。折疊狀態(tài)的改變會(huì)引起窗口大小的改變,要保證頁(yè)面連續(xù)性不銷(xiāo)毀重建需要在清單文件對(duì)應(yīng)Activity組件中添加如下屬性,然后在onConfigurationChanged回調(diào)方法中處理頁(yè)面適配問(wèn)題。
<activity android:name="com.example.HomeActivity"
android:configChanges="keyboardHidden|locale|orientation|screenLayout|screenSize|smallestScreenSize"
/>
適配UI
可以通過(guò)下面的adb命令模擬窗口大小的改變,確保頁(yè)面不會(huì)銷(xiāo)毀重建,UI無(wú)明顯異常。
# 模擬折疊屏展開(kāi)效果
adb shell wm size 2200x2480
# 模擬折疊屏關(guān)閉效果
adb shell wm size 1136x2480
# 恢復(fù)到原始尺寸
adb shell wm size reset
針對(duì)native組件寬度不要寫(xiě)死,盡量使用match_parent尺寸適配UI。針對(duì)RN頁(yè)面組件寬度可以設(shè)置為100%,如果需要獲取窗口寬高,可以使用下面的API監(jiān)聽(tīng)窗口大小發(fā)生改變。
Dimensions.addEventListener("change",(result)=>{
var {height, width} = Dimensions.get('window');
console.log("ywg change width=" + width + " height=" + height);
});
華為也提供了針對(duì)折疊屏UI適配方案,當(dāng)顯示大屏?xí)r可以展示更多內(nèi)容,但這對(duì)應(yīng)用的改動(dòng)較大,相當(dāng)于適配了一個(gè)Pad版本,考慮到折疊屏手機(jī)的價(jià)格及人力成本,所以暫不考慮這個(gè)方案。
支持多窗口(分屏)
從Android 7.0開(kāi)始如果未在清單文件中配置android:resizeableActivity="false"那么應(yīng)用默認(rèn)支持多窗口功能。所以如果應(yīng)用不支持多窗口功能,只需要將該配置移除或設(shè)置true即可。PS:在非折疊屏手機(jī)上由于屏幕較小,大部分用戶(hù)對(duì)于多窗口功能并不常用。支持多窗口功能只是為了滿(mǎn)足廠商對(duì)折疊屏適配的要求,由于成本原因并不會(huì)針對(duì)多窗口模式下的功能做適配。
總結(jié)
針對(duì)折疊屏手機(jī)的適配在不考慮體驗(yàn)的情況只保證功能的可用性,滿(mǎn)足廠商的要求適配折疊屏相對(duì)來(lái)說(shuō)還是比較簡(jiǎn)單的。如果要針對(duì)折疊屏展開(kāi)大屏進(jìn)行適配,可以等折疊屏手機(jī)有一定占有率時(shí)再作考慮。