国产探花免费观看_亚洲丰满少妇自慰呻吟_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開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 拜泉县| 亳州市| 当雄县| 永安市| 三都| 昌平区| 乐昌市| 新兴县| 温州市| 孝义市| 佳木斯市| 临洮县| 清徐县| 项城市| 拉萨市| 马公市| 乌苏市| 望谟县| 巫溪县| 武夷山市| 永州市| 平塘县| 闻喜县| 桑日县| 靖安县| 湟中县| 咸丰县| 永宁县| 鸡西市| 河南省| 沙河市| 安吉县| 闸北区| 获嘉县| 赣榆县| 西丰县| 当雄县| 虎林市| 汤阴县| 江津市| 柳州市|