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

首頁 > 系統 > Android > 正文

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

2019-12-12 00:39:48
字體:
來源:轉載
供稿:網友

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

首頁下部分是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 虛擬按鍵適配動態調整布局的方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 望江县| 罗源县| 新建县| 广德县| 青海省| 霍林郭勒市| 广东省| 潼南县| 湖南省| 松桃| 福清市| 襄垣县| 桦南县| 淄博市| 泽州县| 邓州市| 朝阳区| 安岳县| 苍南县| 石阡县| 乳山市| 民勤县| 舟曲县| 莆田市| 建瓯市| 察隅县| 中宁县| 车致| 莱芜市| 大余县| 湘潭县| 宁乡县| 平顺县| 丰镇市| 景宁| 阜阳市| 海阳市| 惠水县| 宁河县| 沽源县| 休宁县|