Android虛擬按鍵的適配問題

新開了 <<Android Tips>> 文集,這個(gè)文集主要分享一些短小、簡單實(shí)用的小技巧。希望大家喜歡。


最近幾天逛博客時(shí),趕巧遇到了好幾個(gè)人在談Android的虛擬按鍵適配,問題大概是這樣的:

有不少手機(jī),比如華為的大部分手機(jī),Nexus 等都是不帶實(shí)體按鍵的,取而代之的是虛擬按鍵,學(xué)名叫 NavigationBar。NavigationBar 顯示時(shí)會(huì)占用一定的屏幕高度,使得 Activity 實(shí)際的布局高度變窄了,如果 Activity 中的視圖太高,則視圖的底部會(huì)被 NavigationBar 切掉(遮擋)。

我有點(diǎn)好奇,為什么大家普遍在這個(gè)問題上糾結(jié)。其實(shí),我并不把它看成是一個(gè)技術(shù)問題。而應(yīng)該是一個(gè)對(duì)設(shè)計(jì)稿的理解問題。

設(shè)計(jì)師在設(shè)計(jì)視覺稿的時(shí)候,一般會(huì)考慮預(yù)留出狀態(tài)欄區(qū)域,將除狀態(tài)欄以外的區(qū)域作為設(shè)計(jì)區(qū)域。但她們基本不會(huì)考慮 NavigationBar。視覺稿中底部的一些 UI 元素,往往是通過一些 marginTop 來讓它們看起來在底部。

試想一下,如果我們在實(shí)現(xiàn)的時(shí)候,如果完全按照視覺稿中的 marginTop 去做豎向布局,則在帶有 NavigationBar 的手機(jī)上,實(shí)際可用的布局高度小于視覺稿中的設(shè)計(jì)高度時(shí),超出部分的內(nèi)容就會(huì)被切掉,也就出現(xiàn)了所謂的適配問題。貼一個(gè)一般公式:

設(shè)計(jì)高度 = 屏幕高度 - 狀態(tài)欄高度
布局高度 = 屏幕高度 - 狀態(tài)欄高度 - 虛擬按鍵高度

要解決這個(gè)問題,其實(shí)很簡單,我說過,這不是一個(gè)技術(shù)問題,因此不必使用 fitsSystemWindows 屬性,也避免了副作用。只需要在布局時(shí),正確理解設(shè)計(jì)師的意圖,比如,如果一個(gè)按鈕在最底部,你應(yīng)該用 layout_gravity="bottom" 而不是用 marginTop 或者其他方式來把它撐到底部。

一個(gè)中心思想是:盡可能的從下往上,而非從上往下布局。不要盲目的完全按照視覺稿中的尺寸去布局,應(yīng)該區(qū)分出不同視覺元素的重要性,優(yōu)先保證最上方和最下方的元素正確顯示,至于中間的元素,多多用相對(duì)布局或是weight屬性吧。

好了,周末愉快。


額,貌似這篇文章所講述的內(nèi)容和大家所期望的不是同一個(gè)東西。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容