监听某个视图的变化,当可以看见的高度发生变化时,就对这个视图重新布局,保证视图不会被遮挡,也不会浪费屏幕空间。

这一点尤其可用在像华为手机等可以隐藏和显示虚拟键盘上导致屏幕变化的手机上。

这里提供一个工具类:

public class VirturlUtil {// For more information, see https://code.google.com/p/android/issues/detail?id=5497// To use this class, simply invoke assistActivity() on an Activity that already has its content view set./*** 关联要监听的视图** @param viewObserving*/public static void assistActivity(View viewObserving) {new AndroidBug54971Workaround(viewObserving);}private View mViewObserved;//被监听的视图private int usableHeightPrevious;//视图变化前的可用高度private ViewGroup.LayoutParams frameLayoutParams;private AndroidBug54971Workaround(View viewObserving) {mViewObserved = viewObserving;//给View添加全局的布局监听器mViewObserved.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {public void onGlobalLayout() {resetLayoutByUsableHeight(computeUsableHeight());}});frameLayoutParams = mViewObserved.getLayoutParams();}private void resetLayoutByUsableHeight(int usableHeightNow) {//比较布局变化前后的View的可用高度if (usableHeightNow != usableHeightPrevious) {//如果两次高度不一致//将当前的View的可用高度设置成View的实际高度frameLayoutParams.height = usableHeightNow;mViewObserved.requestLayout();//请求重新布局usableHeightPrevious = usableHeightNow;}}/*** 计算视图可视高度** @return*/private int computeUsableHeight() {Rect r = new Rect();mViewObserved.getWindowVisibleDisplayFrame(r);return (r.bottom);}
}

计算可视高度,直接原始bottom

然后在你需要解决这个问题的Activity的onCreate方法的setContentView(R.layout.content_frame);后面添加上

 
VirturlUtil.assistActivity(findViewById(android.R.id.content));

搞定!

Android 解决华为虚拟键冲突遮挡底部按钮相关推荐

  1. android适配华为虚拟键

    在做横竖屏展示时,发现网上适配虚拟键代码没有做横屏状态下适配,导致横屏状态下,底部虚拟键遮挡了布局内容. 所以横屏状态下也需要适配华为虚拟键.只需要在content布局改变时,同时记录当前可用的视图宽 ...

  2. android解决底部导航栏遮挡问题,Android虚拟导航栏遮挡底部的输入框的解决方法...

    1.场景还原 最近忙着app的适配,在这个过程问题中,各种机型的奇葩问题都出来了,适配真尼玛痛苦!今天就oppo机型虚拟导航栏遮挡底部的输入框的问题作个记录. ① 在该Activity的根layout ...

  3. android 布局适配虚拟键适配

    今天,看到关于虚拟键盘的内容,于是记录一下. 如果是控件,可以直接使用Android:fitsSystemWindows="true"),但是如果是popwindow,那就必须获取 ...

  4. android 软键盘遮住按钮,Android应用中出现软键盘遮挡住按钮如何解决

    Android应用中出现软键盘遮挡住按钮如何解决 发布时间:2020-11-20 16:25:47 来源:亿速云 阅读:110 作者:Leah Android应用中出现软键盘遮挡住按钮如何解决?相信很 ...

  5. android 解决华为 SlidingMenu出现白屏

    今天,讲讲如何处理  SlidingMenu在华为手机上出现的白屏. 之前做了一个自定义的Monitor,用来播放视频,但是在华为手机上,每次滑动SlideMenu后,Monitor会出现白屏,之 ...

  6. Android 解决沉浸式状态栏和华为虚拟按键冲突

    对于现在的 App 来说,布局页面基本都会用到沉浸式状态栏,单纯的沉浸式状态栏很容易解决,但是在华为手机上存在一个底部虚拟按键的问题,会导致页面底部和顶部出现很大的问题,比如页面底部导航栏被按键覆盖, ...

  7. android自动隐藏虚拟键,Android 隐藏底部虚拟键的两种方法

    方法一  滑动屏幕 可重新显示出来 protected void hideBottomUIMenu() { //隐藏虚拟按键,并且全屏 if (Build.VERSION.SDK_INT > 1 ...

  8. [android] 解决DatePickerDialog和TimePickerDialog控件取消按钮问题

    一. 问题提出       在Android程序中,我们通常需要使用DatePicker来设置日期,TimePicker来设置时间.其基本步骤是:              1.先定义DatePick ...

  9. android解决底部导航栏遮挡问题,Android虚拟导航栏遮挡底部的输入框的解决方法

    .场景还原 最近忙着app的适配,在这个过程问题中,各种机型的奇葩问题都出来了,适配真尼玛痛苦! ① 在该Activity的根layout配置如下属性: android:fitsSystemWindo ...

最新文章

  1. TCP通过滑动窗口和拥塞窗口实现限流,能抵御ddos攻击吗
  2. 【teradata】强制解锁
  3. 机器学习知识点(五)梯度下降法Java实现
  4. [loj2087][NOI2016]国王饮水记
  5. 带你揭开IP地址的神秘身份
  6. excel判断两列中同一行的数据是否一致
  7. 两阶段最小二乘法原理_两阶段最小二乘法.PPT
  8. java读文件指定行开始到文件的最后
  9. Apache Log4j任意代码执行漏洞安全风险通告第三次更新
  10. Google Play市场考察报告-2
  11. C#继承(初始化基类,重写,重载)
  12. 谷粒商城:06. 前端开发基础知识
  13. POJ - 1384 Piggy-Bank(完全背包)
  14. 远程访问型木马——灰鸽子软件的使用(含免杀)
  15. VS2019安装和使用教程
  16. Vue2组件通信方式
  17. Android性能优化系列-监听View inflate周期并动态替换
  18. DZY Loves Math系列
  19. pandas数据日期函数之date_range()、resample()与to_period()
  20. Maven打包时出现程序包不存在和test相关报错

热门文章

  1. 怎么回事?网传熊猫直播本月申请破产?3月18日关停所有服务器
  2. 华为鸿蒙系统真的可以变成苹果系统吗,华为推出鸿蒙2.0系统,真的能超越谷歌与苹果吗?...
  3. 如何更改照片的像素和大小?更改图片大小的方法
  4. Python 打印杨辉三角形(包括金字塔的款式的~~)
  5. ai如何复制文字并对齐_ai字体左右对齐 ai怎么让多行文字左右都对齐
  6. “科技猫”联合创始人古茜:懂科技的女生更性感
  7. C语言 PTA习题3-2 高速公路超速处罚
  8. mysql索引失效的替代方案,索引失效的十大杂症
  9. steam战地5无法启动解决方法 战地1、5等EA游戏无法启动解决方法
  10. QQ群文件下载速度慢-解决得得得得办法