网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

Android虚拟按键适配动态调整布局的方法

最近项目中遇到了华为虚拟按键适配的问题,主页是个RecylerView(如下图),如果不做适配,在界面初始化完毕后,虚拟按键会遮挡页面或者空出一些留白部分,针对这个问题上网找了些资料,总结了以下方法

10年积累的网站设计、成都网站制作经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先做网站设计后付款的网站建设流程,更有乡宁免费网站建设让你可以放心的选择与我们合作。

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 虚拟按键适配动态调整布局的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持创新互联。


分享题目:Android虚拟按键适配动态调整布局的方法
文章地址:http://bjjierui.cn/article/gjdsdp.html

其他资讯