小編最近入手了一臺(tái)小米 MIX 2,單看手機(jī)外表憾赁,覺(jué)得很驚艷污朽,因?yàn)橐谎弁ィ謾C(jī)都是屏龙考,但是使用過(guò)程卻有一個(gè)小問(wèn)題蟆肆,讓我很不舒服,就是由于有些應(yīng)用沒(méi)有和全面屏適配晦款,導(dǎo)致在使用過(guò)程中屏幕上下方都有黑框炎功,所以小編特地去搜集了一些資料以解決這個(gè)問(wèn)題。
蘋果今年發(fā)布的 iPhone X 比全面屏多了一個(gè)“劉夯航Γ”蛇损,不過(guò)蘋果有特別針對(duì)“劉海屏”給出了適配方案,詳情請(qǐng)?zhí)D(zhuǎn)閱讀 iPhone X 交互設(shè)計(jì)官方指南坛怪。但是與蘋果統(tǒng)一生態(tài)不同的是淤齐,國(guó)內(nèi)的安卓市場(chǎng)碎片化十分嚴(yán)重,這讓 Android 軟件開發(fā)工程師叫苦不迭袜匿。蘋果今年發(fā)布的 iPhone X 比全面屏多了一個(gè)“劉焊模”,不過(guò)蘋果有特別針對(duì)“劉海屏”給出了適配方案居灯,詳情請(qǐng)?zhí)D(zhuǎn)閱讀 iPhone X 交互設(shè)計(jì)官方指南祭务。但是與蘋果統(tǒng)一生態(tài)不同的是,國(guó)內(nèi)的安卓市場(chǎng)碎片化十分嚴(yán)重穆壕,這讓 Android 軟件開發(fā)工程師叫苦不迭待牵。
什么是全面屏手機(jī)?
該怎么定義全面屏手機(jī)呢喇勋?小米最初也只是對(duì)其有一個(gè)抽象的定義「正面幾乎全是屏幕缨该,仿佛握著一塊透明玻璃」,全面屏顧名思義就是一整面都是屏幕川背,理想中的全面屏就是達(dá)到 100% 的屏占比贰拿,同時(shí)能夠滿足當(dāng)前的日常需求,如攝像頭熄云,聽筒膨更、指紋解鎖等。但隨著 iPhone X 的出現(xiàn)缴允,有越來(lái)越多的人都在爭(zhēng)論“全面屏”荚守,認(rèn)為有劉海就談不上無(wú)邊框珍德,甚至大家開始疑問(wèn)全面屏的真正含義。
根據(jù)目前的技術(shù)水平和業(yè)內(nèi)大部分人的說(shuō)法矗漾,認(rèn)為目前的全面屏手機(jī)要同時(shí)符合兩個(gè)條件才能稱為真正的全面屏:
分辨率大于 16:9
屏占比大于 80%
例如在業(yè)內(nèi)率先提出全面屏概念并完全去掉機(jī)身正面半頂部邊框設(shè)計(jì)的的小米 MIX锈候,它的屏幕縱橫比為 17:9,今年小米推出的 MIX 2 屏幕縱橫比為 18:9敞贡。
從人體工程學(xué)角度分析泵琳,18:9 的比例更適合用戶單手持握,更重要的是誊役,全面屏的高屏占比可以給用戶在游戲和視頻觀看上帶來(lái)極致的視覺(jué)體驗(yàn)获列。然而,市面上很多廠商卻因此偷換概念蛔垢,認(rèn)為手機(jī)配備 18:9 的比例屏幕就是全面屏击孩,故在手機(jī)設(shè)計(jì)上只保留了 18:9 的比例,而邊框依然寬大啦桌,這顯然忽視了全面屏最本質(zhì)的特征溯壶。
目前,業(yè)內(nèi)較為認(rèn)可的全面屏手機(jī)主要有以下幾種:
目前甫男,業(yè)內(nèi)較為認(rèn)可的全面屏手機(jī)主要有以下幾種:
移動(dòng)應(yīng)用適配全面屏情況
全面屏適配方案
由于全面屏手機(jī)在追求更小的邊框設(shè)計(jì)且改、更高的屏占比,這些變化導(dǎo)致了手機(jī)發(fā)生兩種變化板驳,即更大的屏幕縱橫比和導(dǎo)航鍵變成了虛擬鍵又跛,所以應(yīng)從這兩個(gè)方面進(jìn)行適配。
一.聲明 Maximum Aspect Ratio
隨著大量的手機(jī)廠商將目光投向全面屏若治,為了順應(yīng)市場(chǎng)需求慨蓝,谷歌向開發(fā)者提供了官方的 Android 全面屏適配指南。
左:18.5:9 設(shè)備上的最大縱橫比設(shè)為16:9 的APP
右:18.5:9 設(shè)備上最大縱橫比設(shè)為18.5:9 以上的APP
- 在 AndroidManifest.xml 中可做如下配置:
<meta-data
android:name="android.max_aspect"
android:value="ratio_float" />
其中 ratio_float 為縱橫比端幼,官方建議設(shè)為 2.1 或更大礼烈,因?yàn)槟壳笆袌?chǎng)上出現(xiàn)的Android全面屏手機(jī)屏幕縱橫比最大的為三星的 18.5:9=2.0556,但是如果以后要是出現(xiàn)縱橫比更大的手機(jī)婆跑,設(shè)置值就要更大此熬。
- 若沒(méi)有聲明該屬性,而且
android:resizeableActivity
也為false
的話滑进,則應(yīng)用支持的應(yīng)用的最大縱橫比的默認(rèn)值為 1.86犀忱,小于 2.0556,即無(wú)法支持全面屏扶关,屏幕的上下就會(huì)留有黑框阴汇,如上圖左。
二. 怎樣防止圖片變形
當(dāng)使用 layout 布局實(shí)現(xiàn)界面類 APP 時(shí)节槐,容易出現(xiàn)圖片被拉伸的情況搀庶,如打開淘寶的頁(yè)面就會(huì)變成如下所示:
對(duì)于這種情況拐纱,解決的辦法是:
- 使用相對(duì)布局設(shè)計(jì)界面
- 為對(duì)應(yīng)的分辨率提供相應(yīng)布局、圖片等資源(drawable-xxhdpi-2016x1080哥倔、drawable-long 等)
- 使用顏色填充布局戳玫、.9 圖片填充背景
三.虛擬導(dǎo)航鍵設(shè)置
為了保證虛擬鍵和 App 的界面風(fēng)格一致,應(yīng)注意設(shè)置虛擬鍵顏色與主題協(xié)調(diào)未斑,所以在進(jìn)行虛擬鍵的設(shè)置時(shí),要注意以下幾點(diǎn):
- 使用沉浸式虛擬鍵時(shí)币绩,用原生標(biāo)準(zhǔn)方法設(shè)置虛擬按鍵的背景顏色蜡秽;
- 在夜間模式和主題切換的時(shí)候,重新設(shè)置一下虛擬按鍵背景顏色缆镣;
- 看圖界面使用全屏布局芽突,并設(shè)置半透明虛擬按鍵背景。
具體操作如下:
根據(jù)金立18:9 全面屏虛擬鍵的適配說(shuō)明董瞻,具體的設(shè)置虛擬鍵背景色的方法有:
- 方法 1:在主題中添加以下設(shè)置項(xiàng):
<item name="android:navigationBarColor">要設(shè)置的顏色值</item>
- 方法 2:通過(guò)使用 Window 類的 setNavigationBarColor API 進(jìn)行控制寞蚌。
注意,要想設(shè)置虛擬按鍵背景色生效钠糊,必須要設(shè)置 FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS 并且不能設(shè)置 FLAG_TRANSLUCENT_NAVIGATION挟秤,即要先執(zhí)行:
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_ BACKGROUNDS);
例如:
getWindow().setNavigationBarColor(Color.TRANSPARENT); // 設(shè)為透明
getWindow().setNavigationBarColor(Color.BLACK); // 設(shè)為不透明
getWindow().setNavigationBarColor(0x80000000); // 設(shè)為半透明(Color 類中沒(méi)有半透明的常量定義,同時(shí)暫不考慮修改框架代碼抄伍,所以使用的具體數(shù)值)
四. 修改虛擬鍵的樣式
調(diào)用以下接口即可
window.setNavigationBarColor (int color)
在調(diào)用該接口時(shí)艘刚,還需要設(shè)置一些 flag,詳見該接口的注釋說(shuō)明(即下文):
* Sets the color of the navigation bar to {@param color}.
*
* For this to take effect,
* the window must be drawing the system bar backgrounds with
* {@link android.view.WindowManager.LayoutParams#FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS} and
* {@link android.view.WindowManager.LayoutParams#FLAG_TRANSLUCENT_NAVIGATION} must not be set.
*
* If {@param color} is not opaque, consider setting
* {@link android.view.View#SYSTEM_UI_FLAG_LAYOUT_STABLE} and
* {@link android.view.View#SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION}.
* <p>
* The transitionName for the view background will be "android:navigation:background".
* </p>
*/
public abstract void setNavigationBarColor(@ColorInt int color);
相關(guān)文獻(xiàn):
谷歌官方全面屏適配指南
小米全面屏及虛擬鍵適配說(shuō)明
金立全面屏底部虛擬按鍵適配