新開了 <<Android Tips>> 文集曙旭,這個(gè)文集主要分享一些短小蘑拯、簡(jiǎn)單實(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 來讓它們看起來在底部旺嬉。
試想一下,如果我們?cè)趯?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í)很簡(jiǎn)單设易,我說過,這不是一個(gè)技術(shù)問題蛹头,因此不必使用 fitsSystemWindows 屬性顿肺,也避免了副作用戏溺。只需要在布局時(shí),正確理解設(shè)計(jì)師的意圖屠尊,比如旷祸,如果一個(gè)按鈕在最底部,你應(yīng)該用 layout_gravity="bottom" 而不是用 marginTop 或者其他方式來把它撐到底部讼昆。
一個(gè)中心思想是:盡可能的從下往上托享,而非從上往下布局。不要盲目的完全按照視覺稿中的尺寸去布局浸赫,應(yīng)該區(qū)分出不同視覺元素的重要性闰围,優(yōu)先保證最上方和最下方的元素正確顯示,至于中間的元素既峡,多多用相對(duì)布局或是weight屬性吧羡榴。
好了,周末愉快运敢。
額校仑,貌似這篇文章所講述的內(nèi)容和大家所期望的不是同一個(gè)東西。