最近项目中遇到了华为虚拟按键适配的问题,主页是个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 虚拟按键适配动态调整布局的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

本文标题: Android 虚拟按键适配动态调整布局的方法

本文地址: http://www.cppcns.com/ruanjian/android/235884.html

安卓开发 监听虚拟按键_Android 虚拟按键适配动态调整布局的方法相关推荐

  1. jquery 监听td点击事件_安卓开发监听点击事件的一种方法

    本人是菜鸟一只,学习安卓纯属兴趣.没有真正上过编程课程,所有知识都是在网上获取的.今天分享的是监听点击事件的一个方法,这个方法的好处是代码较简洁. 如图,点击保存时,把上面的数据入库. 实现如下: 在 ...

  2. Android 虚拟按键适配动态调整布局

    监听虚拟键的切换 给View添加全局的布局监听器 参考链接 最近项目中遇到了华为虚拟按键适配的问题,主页是个RecylerView(如下图),如果不做适配,在界面初始化完毕后,虚拟按键会遮挡页面或者空 ...

  3. 安卓开发监听外部蓝牙设备断开_这软件能让你的蓝牙耳机,用上 AirPods 的功能...

    打开这篇文章时,大家可能正佩戴着某款无线蓝牙耳机. 不管是头戴式,颈挂式还是分体式,总之现在无线蓝牙耳机已经跟智能手机一样,成为生活中很常见的随身物品. 但在大家渐渐对无线蓝牙耳机习以为常的时候,有个 ...

  4. 混合开发监听安卓手机物理返回键

    混合开发监听安卓手机物理返回键 在用h5做混合开发过程中由于有个考试考试页面,中途不能退出,退出要添加确认操作,所以需要监听手机的返回操作,不让用户直接通过返回键返回 目前了解到混合开发中有两种方式监 ...

  5. 微信公众号监听返回按钮关闭当前界面,部分安卓机监听popstate失败【小程序与公众号】

    需求: 微信公众号开发的时候,可能会出现这种需求: 微信公众号内指定某个网页在点击返回键时不回退到上一级,而是直接关闭微信浏览器窗口,用户点击返回按钮本身就是一个返回事件. 解决方案: 利用监听返回事 ...

  6. 监听pda扫描_Android监听扫描枪内容(一)

    在之前的文章,我已经写过了一篇关于扫描枪数据获取通常处理的文章,大家有兴趣的话可以参看 PDA扫描获取内容的通常处理 但此方式在实际运用中,有一个不方便的地方,那就是要想监听扫描枪的内容,我们必须在布 ...

  7. Oracle监听注册和sqlnet,Oracle监听配置(四)--如何实现静态、动态注册

    Oracle监听配置(四)--如何实现静态.动态注册 第三节我们已经大概了解什么是静态注册和动态注册,下面我们将通过两个例子来更加深入了解它们之间的区别. 静态注册:当listener使用的是非标准端 ...

  8. uni-app - 苹果安卓系统监听物理返回按键(手机左滑返回监听)

    前言 注意:以下方法只适用于 APP ,不适用于小程序 / H5 等平台. 有时候,我们需要监听安卓及苹果系统的物理返回上一页,来做一些处理. Android http://ask.dcloud.ne ...

  9. 安卓开发fragment之间的切换_Android开发必会的组件化技术—Android架构和提升必备...

    很多时候我们开发的时候,都需要新建项目,然后一个个底层模块去写,比如各种常见View,工具类,缓存模块等,经常进行这种重复的搬砖工作.主要还是因为我们在平时的开发过程中就没有注意分层.分模块.资源随意 ...

最新文章

  1. python微信红包代码_有了这个再也不担心任何微信红包,Python就是好用
  2. 01_2_数字基带传输及其频谱特性
  3. 20169212《Linux内核原理及分析》第十二周作业
  4. 海天老师 资深TTT/思维训练专家
  5. 计算机数字音乐我的梦,我的音乐梦
  6. 4、Hangfire在AspNetCore中的使用(一)
  7. 电容式位移传感器的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  8. 多核环境下的内存屏障指令
  9. centos镜像下载教程
  10. 使用Javascript无限添加QQ好友原理解析
  11. c++学习笔记-二进制文件操作(哔站-黑马程序员c++教学视频)
  12. 在面试时遇到不了解的问题,如何顺畅的与面试人员交流?
  13. centos安装matlab2018的步骤(基本是借鉴的但是会有些自己的解释及补充)
  14. shrio简介--w3cschool
  15. 图片加载用Fresco,网络请求用OKhttp+Retrofit实现
  16. IPMDA:week 1
  17. mql4 mysql_MQL4的几个常用函数
  18. google maps
  19. 吓人!半夜,这个程序从虚拟机里跑出来了!
  20. 终于找到阻止360文件粉碎机的源代码了

热门文章

  1. 部署学之思在线考试项目
  2. 无人驾驶时代的室外组网技术研究
  3. 第七章 如何增加收入
  4. react里面 内联css样式怎么样_简单的使用Radium管理React中的内联样式
  5. Win10安装fliqlo时钟屏保教程
  6. google drive加速下载
  7. 别的计算机对我电脑无访问权限,为什么他人访问不了我的电脑,说没有权限
  8. 【数学分析入门】R语言独立性检验方法
  9. android高度比例布局,无处安放的AndroidTips:ConstraintLayout的比例布局
  10. 【Visual C++】游戏开发笔记四十三 浅墨DirectX教程十一 为三维世界添彩:纹理映射技术(二)