国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android 虛擬按鍵適配動態調整布局的方法

2019-10-21 21:44:58
字體:
來源:轉載
供稿:網友

最近項目中遇到了華為虛擬按鍵適配的問題,主頁是個RecylerView(如下圖),如果不做適配,在界面初始化完畢后,虛擬按鍵會遮擋頁面或者空出一些留白部分,針對這個問題上網找了些資料,總結了以下方法

Android,虛擬按鍵

首頁下部分是RecylerView

首頁下半部分是個RecylerView(針對適配)

監聽虛擬鍵的切換

注冊系統廣播

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添加全局的布局監聽器

可以看到當虛擬按鍵切換的時候我會調用view的getViewTreeObserver().addOnGlobalLayoutListener給view設置全局的布局監聽器,用于獲取當前view可顯示的實際高度,然后根據高度動態設置子item的高度

布局監聽器的回調

在回調中測量RecylerView可顯示的實際高度

 @Override  public void onGlobalLayout() {    refreshGridViewHeight();  }

注意這個回調是會調用多次的,獲取完高度后要移除這個監聽,否則會造成界面卡頓

private void refreshGridViewHeight() {    gridView_Home.post(new Runnable() {      @Override      public void run() {        //獲取到寬度和高度后,可用于計算        int height = gridView_Home.getHeight();        //根據屏幕高度計算單個菜單的高度,保證屏幕能被填滿        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);            }          }        });      }    });

這個移除布局監聽的方法還要兼容低版本,所以要分情況,具體看代碼

最后記得在Activity的onDestroy或界面銷毀的地方注銷剛才設置的系統廣播接收者

getContentResolver().unregisterContentObserver(mNavigationStatusObserver);

以上這篇Android 虛擬按鍵適配動態調整布局的方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 平阳县| 明光市| 揭东县| 德州市| 沁阳市| 淳化县| 抚顺县| 磴口县| 长沙市| 温州市| 凤庆县| 桓台县| 石泉县| 石狮市| 班戈县| 德化县| 奉新县| 海南省| 沙雅县| 井冈山市| 新沂市| 兴业县| 大名县| 广宗县| 故城县| 高陵县| 勐海县| 白城市| 拉孜县| 苏尼特左旗| 通渭县| 远安县| 尼勒克县| 岳阳市| 开远市| 荥经县| 琼海市| 松阳县| 五峰| 贡觉县| 铁力市|