亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

界面適配華為手機的虛擬按鍵的解決方案

2019-11-06 09:57:10
字體:
來源:轉載
供稿:網友

一、概述

在項目中,測試發現在一些華為手機的屏幕適配上出現了問題,主要是因為華為Mate等一些系列的手機有一個虛擬按鍵的設計.當這些虛擬按鍵由用戶手勢滑出,或默認顯示的話,就會遮擋我們本身的應用布局.比如歡迎界面過后是四個Fragment,那么底部的四個tab就會被虛擬的導航欄遮住,非常難看.

這里寫圖片描述

當然,歡迎頁的圖片適配也同樣會出現問題. Google后得出第一個問題的解決方案.第二個圖片的問題則用自己摸索的方式解決,當然也非常簡單.

二、布局由于虛擬按鍵導致導航欄頂上去的解決方法

在我們的項目中加載Fragment的MainActivity,以及其他一般的Activity繼承的BaseActivity中的onCreate方法中添加如下代碼:

if (AndroidWorkaround.checkDeviceHasNavigationBar(this)) { AndroidWorkaround.assistActivity(findViewById(android.R.id.content));}

其中AndroidWorkaround使我們為了解決該問題而封裝的類,也可以看作是一個特定的工具類:

/*** 解決底部屏幕按鍵適配* Created by Mercury on 2016/10/25.*/public class AndroidWorkaround { public static void assistActivity(View content) { new AndroidWorkaround(content); } PRivate View mChildOfContent; private int usableHeightPrevious; private ViewGroup.LayoutParams frameLayoutParams; private AndroidWorkaround(View content) { mChildOfContent = content; mChildOfContent.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { public void onGlobalLayout() { possiblyResizeChildOfContent(); } }); frameLayoutParams = mChildOfContent.getLayoutParams(); } private void possiblyResizeChildOfContent() { int usableHeightNow = computeUsableHeight(); if (usableHeightNow != usableHeightPrevious) { frameLayoutParams.height = usableHeightNow; mChildOfContent.requestLayout(); usableHeightPrevious = usableHeightNow; } } private int computeUsableHeight() { Rect r = new Rect(); mChildOfContent.getWindowVisibleDisplayFrame(r); return (r.bottom); } public static boolean checkDeviceHasNavigationBar(Context context) { boolean hasNavigationBar = false; Resources rs = context.getResources(); int id = rs.getIdentifier("config_showNavigationBar", "bool", "android"); if (id > 0) { hasNavigationBar = rs.getBoolean(id); } try { Class systemPropertiesClass = Class.forName("android.os.SystemProperties"); Method m = systemPropertiesClass.getMethod("get", String.class); String navBarOverride = (String) m.invoke(systemPropertiesClass, "qemu.hw.mainkeys"); if ("1".equals(navBarOverride)) { hasNavigationBar = false; } else if ("0".equals(navBarOverride)) { hasNavigationBar = true; } } catch (Exception e) { } return hasNavigationBar; }}

重新測試,發現無論是否彈出虛擬按鍵,都不會再次遮擋tab按鈕。

三、原理

上面的代碼需要在setContentView后面執行。其最初的解決方案是stackoverflow上有人為了適配軟鍵盤在全屏下的布局問題。 開始先判斷該設備上是否存在導航欄。為什么用findViewById(android.R.id.content)呢?因為android.R.id.content這個id代表的就是所在頁面的根布局,而并不需要特別指定一個id給該布局??梢酝ㄟ^調用系統API返回的結果,也可以通過判斷該手機是否為華為手機,操作系統屬于哪種類型來來判斷。 一旦確定該設備存在導航欄,將對該布局進行重新測量。首先mChildOfContent得到其視圖樹,對全局高度實現監聽。

OnGlobalLayoutListener 是ViewTreeObserver的內部類,當一個視圖樹的布局發生改變時,可以被ViewTreeObserver監聽到,這是一個注冊監聽視圖樹的觀察者(observer),在視圖樹的全局事件改變時得到通知。ViewTreeObserver不能直接實例化,而是通過getViewTreeObserver()獲得。

接著得到視圖目前可用的總高度,將其賦值給mChildOfContent的布局高度。調用requestLayout,讓mChildOfContent要求自己的parent view對自己重新設置位置。

四、全屏圖片的適配

解決了布局的問題,再來看歡迎頁啟動時候全屏圖片的適配問題。發現該方法對于圖片不適用。如下圖,當虛擬按鍵彈出時,圖片照樣被遮擋了底部的一小部分。 這里寫圖片描述 如果隱藏虛擬按鍵,圖片大小恢復正常 這里寫圖片描述 仔細想想,對于一個ImageView直接占據一個layout的情況,是沒有必要再去寫一些代碼進行適配的。到布局里一看,發現ImageView的屬性 android:scaleType=”centerCrop” 將其改為 android:scaleType=”fitXY”就可以解決了。這樣圖片可能高度會隨著虛擬鍵的彈出而壓縮,但是很好的適配了布局高度的變化而不會被遮擋。

關于scaleType的詳細介紹,留待其他文章里再探討。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲欧美第一页| 96pao国产成视频永久免费| 日韩小视频网址| 欧美性猛交xxxxx水多| 国产成人激情小视频| 国内精品久久久久影院 日本资源| 久久久久国产精品免费| 日韩在线中文字| 亚洲视频视频在线| 久久久久久久av| 海角国产乱辈乱精品视频| 中文字幕精品国产| 国产91九色视频| 91av视频导航| 国内精品国产三级国产在线专| 欧美成人中文字幕| 欧美老女人性视频| 日韩激情片免费| 国产精品久久久久久网站| 亚洲欧美国产va在线影院| 精品亚洲男同gayvideo网站| 一区二区日韩精品| 91精品啪在线观看麻豆免费| 亚洲综合av影视| 91精品国产九九九久久久亚洲| 欧美在线视频a| 色哟哟亚洲精品一区二区| 日韩成人av一区| 国产精品国产福利国产秒拍| 97精品国产97久久久久久| 亚洲精品99久久久久中文字幕| 日韩一区二区三区xxxx| 亚洲国产成人精品久久久国产成人一区| 久久久久久中文字幕| 精品久久久一区二区| 国产噜噜噜噜久久久久久久久| 国产精品国产自产拍高清av水多| 亚洲精品国产精品国产自| 国产精品99久久久久久人| 久久综合88中文色鬼| 久热精品视频在线| 俺去亚洲欧洲欧美日韩| 国产97在线亚洲| 日韩a**站在线观看| 国内精品久久久久影院 日本资源| 中文字幕日韩av| 欧美日本啪啪无遮挡网站| 亚洲美女在线看| 久久综合久久美利坚合众国| 日韩在线播放一区| 欧美精品videos性欧美| 欧美黑人一级爽快片淫片高清| 91精品一区二区| 亚洲色图校园春色| 九九精品视频在线| 亚洲国产精品资源| 亚洲国产高潮在线观看| 日韩精品高清视频| 91亚洲精品视频| 亚洲黄色片网站| 91av网站在线播放| 亚洲美女精品成人在线视频| 日韩网站免费观看| 亚洲精品国产综合久久| 亚洲成人在线视频播放| 欧美福利小视频| 国产精品狼人色视频一区| 精品福利视频导航| 精品久久中文字幕| 日本欧美国产在线| 色偷偷av一区二区三区乱| 亚洲天堂色网站| 日本最新高清不卡中文字幕| 国产亚洲激情视频在线| www.日韩.com| 亚洲美女久久久| 国产精品普通话| 国产亚洲欧美一区| 久久久久女教师免费一区| 国产欧美亚洲视频| 成人黄在线观看| 成人亚洲欧美一区二区三区| 在线不卡国产精品| 亚洲成色777777在线观看影院| 久久久久久91| 亚洲第一精品久久忘忧草社区| 成人羞羞国产免费| 日韩电影在线观看中文字幕| 日韩电影中文字幕在线观看| 久久久久久亚洲精品不卡| 国产一区二区精品丝袜| 国产中文字幕日韩| 清纯唯美日韩制服另类| 91在线视频精品| 国产日韩综合一区二区性色av| 国产欧美日韩丝袜精品一区| 黄网动漫久久久| 国产亚洲欧美另类中文| 日本精品视频在线观看| 久久久爽爽爽美女图片| 久久99国产精品自在自在app| 国产欧美精品日韩精品| 91精品久久久久久久| 欧美日韩亚洲一区二区三区| 97国产真实伦对白精彩视频8| 蜜臀久久99精品久久久久久宅男| 日韩资源在线观看| 九九热这里只有精品6| 亚洲va欧美va国产综合久久| 久久久亚洲国产天美传媒修理工| 欧美午夜激情在线| 日韩精品免费在线播放| 国产精品视频最多的网站| 国产精品欧美日韩久久| 欧美激情在线视频二区| 日韩精品在线观| 久久福利视频网| 国产精品久久久久福利| 高潮白浆女日韩av免费看| 亚洲理论电影网| 欧美精品18videos性欧| 精品成人久久av| 91av视频导航| 亚洲成人av在线播放| 国产亚洲aⅴaaaaaa毛片| 国产精品网红福利| 国产欧美精品久久久| 国产精品久久久91| 亚洲男人天堂网站| 久久躁日日躁aaaaxxxx| 久久综合久中文字幕青草| 91av免费观看91av精品在线| 日韩少妇与小伙激情| 亚洲天堂一区二区三区| 亚洲精品中文字| 亚洲成年人影院在线| 国产精品27p| 成人黄在线观看| 韩国福利视频一区| 欧美激情中文字幕在线| 中文字幕综合一区| 97国产在线视频| 久久久久久亚洲精品中文字幕| 2019av中文字幕| 亚洲天堂一区二区三区| 欧美精品久久久久久久免费观看| 黑丝美女久久久| 热re99久久精品国产66热| 亚洲国产精品99久久| 亚洲欧美精品伊人久久| 国产精品久久久久77777| 欧美激情一级欧美精品| 欧美激情国产精品| 久久综合伊人77777尤物| 中文亚洲视频在线| xxxx欧美18另类的高清| 亚洲精品理论电影| 欧美精品一本久久男人的天堂| 精品久久久精品| 中文字幕亚洲综合久久| 成人在线免费观看视视频| 久久这里只有精品99| 欧美日韩国产中字| 国产精品美女主播在线观看纯欲|