Android 虛擬按鍵適配動態(tài)調(diào)整布局的方法
最近項目中遇到了華為虛擬按鍵適配的問題,主頁是個RecylerView(如下圖),如果不做適配,在界面初始化完畢后,虛擬按鍵會遮擋頁面或者空出一些留白部分,針對這個問題上網(wǎng)找了些資料,總結(jié)了以下方法
首頁下部分是RecylerView
首頁下半部分是個RecylerView(針對適配)
監(jiān)聽虛擬鍵的切換
注冊系統(tǒng)廣播
getContentResolver().registerContentObserver(Settings.System.getUriFor("navigationbar_is_min"), true, mNavigationStatusObserver);
private ContentObserver mNavigationStatusObserver = new ContentObserver(new Handler()) { @Override public void onChange(boolean selfChange) { int navigationBarIsMin = Settings.System.getInt(getContentResolver(), "navigationbar_is_min", 0); if (navigationBarIsMin == 1) {//導航鍵隱藏了 Log.e("導航鍵隱藏了", "-----"); gridView_Home.getViewTreeObserver().addOnGlobalLayoutListener(HomeActivity.this); } else {//導航鍵顯示了 Log.e("導航鍵顯示了", "-----"); gridView_Home.getViewTreeObserver().addOnGlobalLayoutListener(HomeActivity.this); } } };
給View添加全局的布局監(jiān)聽器
可以看到當虛擬按鍵切換的時候我會調(diào)用view的getViewTreeObserver().addOnGlobalLayoutListener給view設(shè)置全局的布局監(jiān)聽器,用于獲取當前view可顯示的實際高度,然后根據(jù)高度動態(tài)設(shè)置子item的高度
布局監(jiān)聽器的回調(diào)
在回調(diào)中測量RecylerView可顯示的實際高度
@Override public void onGlobalLayout() { refreshGridViewHeight(); }
注意這個回調(diào)是會調(diào)用多次的,獲取完高度后要移除這個監(jiān)聽,否則會造成界面卡頓
private void refreshGridViewHeight() { gridView_Home.post(new Runnable() { @Override public void run() { //獲取到寬度和高度后,可用于計算 int height = gridView_Home.getHeight(); //根據(jù)屏幕高度計算單個菜單的高度,保證屏幕能被填滿 final int itemHeight = height / 3 - 3; runOnUiThread(new Runnable() { @Override public void run() { homeMenuAdapter.setIemtHeight(itemHeight); gridView_Home.setAdapter(homeMenuAdapter); mPresenter.refushGridData(); if (Build.VERSION.SDK_INT < 16) { gridView_Home.getViewTreeObserver().removeGlobalOnLayoutListener(HomeActivity.this); } else { gridView_Home.getViewTreeObserver().removeOnGlobalLayoutListener(HomeActivity.this); } } }); } });
這個移除布局監(jiān)聽的方法還要兼容低版本,所以要分情況,具體看代碼
最后記得在Activity的onDestroy或界面銷毀的地方注銷剛才設(shè)置的系統(tǒng)廣播接收者
getContentResolver().unregisterContentObserver(mNavigationStatusObserver);
以上這篇Android 虛擬按鍵適配動態(tài)調(diào)整布局的方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Android手冊之Toolbar搜索聯(lián)動及監(jiān)聽小技巧
這篇文章主要為大家介紹了Android手冊之Toolbar搜索聯(lián)動及監(jiān)聽小技巧示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-09-09Android實現(xiàn)ListView異步加載圖片的方法
這篇文章主要介紹了Android實現(xiàn)ListView異步加載圖片的方法,以實例形式較為詳細的分析了Android中ListView異步加載圖片的原理與相關(guān)實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-10-10Android開發(fā)重寫Animation實現(xiàn)下拉圖片后彈射回去效果示例
這篇文章主要介紹了Android開發(fā)重寫Animation實現(xiàn)下拉圖片后彈射回去效果,結(jié)合實例形式分析了Android自定義類繼承Animation實現(xiàn)圖片彈射效果的相關(guān)操作技巧,需要的朋友可以參考下2017-10-10Android利用animation-list實現(xiàn)幀動畫
這篇文章主要為大家詳細介紹了Android利用animation-list實現(xiàn)幀動畫,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-12-12Android實現(xiàn)簡單的popupwindow提示框
這篇文章主要為大家詳細介紹了Android實現(xiàn)簡單的popupwindow提示框,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-10-10Android中判斷網(wǎng)絡(luò)是否連接實例詳解
這篇文章主要介紹了Android中判斷網(wǎng)絡(luò)是否連接實例詳解的相關(guān)資料,需要的朋友可以參考下2017-01-01