华为等手机底部带有虚拟按键,会遮挡app的底部,针对这个问题网上有一些解决方案,但都不是很完美,或多或少存在一些问题。

下面推荐一个比较完美的适配方式。

public class AndroidWorkaround {
    public static void assistActivity(View content) {
        new AndroidWorkaround(content);
    }

private View mChildOfContent;
    private int usableHeightPrevious;
    private ViewGroup.LayoutParams frameLayoutParams;

private AndroidWorkaround(View content) {
        mChildOfContent = content;
        mChildOfContent.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            public void onGlobalLayout() {
                possiblyResizeChildOfContent();
            }
        });
        frameLayoutParams = mChildOfContent.getLayoutParams();
    }

private void possiblyResizeChildOfContent() {
        int usableHeightNow = computeUsableHeight();
        if (usableHeightNow != usableHeightPrevious) {

frameLayoutParams.height = usableHeightNow;
            mChildOfContent.requestLayout();
            usableHeightPrevious = usableHeightNow;
        }
    }

private int computeUsableHeight() {
        Rect r = new Rect();
        mChildOfContent.getWindowVisibleDisplayFrame(r);
        return (r.bottom);
    }

public static boolean checkDeviceHasNavigationBar(Context context) {
        boolean hasNavigationBar = false;
        Resources rs = context.getResources();
        int id = rs.getIdentifier("config_showNavigationBar", "bool", "android");
        if (id > 0) {
            hasNavigationBar = rs.getBoolean(id);
        }
        try {
            Class systemPropertiesClass = Class.forName("android.os.SystemProperties");
            Method m = systemPropertiesClass.getMethod("get", String.class);
            String navBarOverride = (String) m.invoke(systemPropertiesClass, "qemu.hw.mainkeys");
            if ("1".equals(navBarOverride)) {
                hasNavigationBar = false;
            } else if ("0".equals(navBarOverride)) {
                hasNavigationBar = true;
            }
        } catch (Exception e) {

}
        return hasNavigationBar;

}

}

随后在activity的setContentView后调用即可

setContentView(R.layout.activity_main);
//适配虚拟按键
if (AndroidWorkaround.checkDeviceHasNavigationBar(this)) {
    AndroidWorkaround.assistActivity(findViewById(android.R.id.content));
}

以上转载:https://blog.csdn.net/wuhongjie24/article/details/80987142的文章,自己项目中亲测有效,供各位码友参考。

Android虚拟按键的适配相关推荐

  1. android虚拟按键实现,虚拟按键的实现

    8.6 虚拟按键的实现 虚拟按键(Virtual Key)是Eclair版本开始增加的新特性.Virtual Key的功能是利用触摸屏,模拟按键发生的事件,这样就可以利用触摸屏的边缘,实现一些可以自定 ...

  2. 电容屏/电阻屏Android虚拟按键实现的两种方法

    (一) 虚拟按键的描述可以见 韩超和梁泉的 <Android系统级深入开发--移植与调试>的第八章: 虚拟按键(Virtual Key)是Eclair版本开始增加的新特性.Virtual  ...

  3. Android 虚拟导航键适配

    Android 虚拟导航键适配 最近项目里需要适配虚拟导航键,以及获取导航键的高度,来适配界面布局的高度. 判断虚拟导航键是否存在 不得不说,国内由于不同手机厂商对系统做了不同的修改,对系统界面底部的 ...

  4. react native 安卓(特别是小米手机)全面屏是否开虚拟按键的适配

    react native 安卓(特别是小米手机)全面屏是否开虚拟按键的适配 做rn蛮久了,遇到的坑无数,谢谢大家带我爬过的坑,这次我也来分享一下,希望帮助到有需要的人! 大家先看先后效果对比: 没开虚 ...

  5. android按钮被遮住,解决Android 虚拟按键遮住了页面内容的问题

    在启动页的时候华为手机虚拟按键遮挡住了启动页下面的字找了找解决办法,特地记录一下 第一种办法:扩展虚拟按键 //状态栏 @ 顶部getWindow().addFlags(WindowManager.L ...

  6. android 虚拟按键源码流程分析

    android 虚拟按键流程分析 今天来说说android 的虚拟按键的源码流程.大家都知道,android 系统的状态栏,虚拟按键,下拉菜单,以及通知显示,keyguard 锁屏都是在framewo ...

  7. android 覆盖虚拟按键,解决Android 虚拟按键遮住了页面内容的问题

    在启动页的时候华为手机虚拟按键遮挡住了启动页下面的字找了找解决办法,特地记录一下 第一种办法:扩展虚拟按键 //状态栏 @ 顶部getWindow().addFlags(WindowManager.L ...

  8. uniapp中隐藏Android虚拟按键

    前言: uniapp中如何隐藏Android虚拟按键 (如下图) 解决: 通过h5-plus中的方法,plusready 后调用 https://www.html5plus.org/doc/zh_cn ...

  9. Android 虚拟按键隐藏或显示之后共享元素动画异常解决方案

    背景 本篇算是共享元素的第三篇文章.主要还是因为第一篇才会衍生出来了第二篇和第三篇文章,后两篇均属于bug的分析和解决. 1.Android 仿微信朋友圈图片拖拽返回 2.Android 共享元素动画 ...

最新文章

  1. Cetos 7 命令行登陆与图形界面登陆相互切换
  2. Type对象获得泛型类型的两个扩展方法
  3. harbor镜像仓库-https访问的证书配置 (docker配置harbor https证书)
  4. php接口数据加密、解密、验证签名【转】
  5. 前端学习(1542):cdn简介
  6. Java集合之Hashtable源码分析
  7. Unity计划放弃支持部分图形特性
  8. python nums函数获取结果记录集有多少行记录_Python数据分析——Pandas数据结构和操作...
  9. Git如何创建本地分支并推送到远程仓库
  10. Windows开机 桌面一片空白 无法操作
  11. python多进程调试_使用pyrasite进行python进程调试,改变运行中进程的代码
  12. ArrayList转换类型为DataTable类型
  13. 使用POI编译word—删除WORD空白段落
  14. 觅伊的进化,是陌生人社交的未来吗?
  15. 动态规划初级篇(上)
  16. matlab 逐日 变逐月,一个逐日系统程序 用SWITCH咋也跳不出循环 求大神指教
  17. 参考文献起止页码怎么写_参考文献是图书,怎么标注页码啊,用到哪页就写哪页吗(⊙_⊙?)...
  18. 500以内什么耳机好?盘点500元蓝牙耳机性价比之王
  19. 基于JSP心悦图书城系统设计与实现
  20. 星起航:抖音小店如何提高店铺评分?

热门文章

  1. Ubuntu18.04 ROS Melodic版本安装gazebo_ros_pkgs包
  2. 笔记本电脑外接显示器完全攻略(图文说明)
  3. 将Ubuntu主文件夹里的中文文件夹名称改成英文
  4. 九宫格拼图android代码,Android 多图上传后将图片进行九宫格展示的实例代码
  5. 使用excel进行数据挖掘(4)---- 突出显示异常值
  6. 用html5做课件,这么好玩!PPT竟然还能用来制作H5?
  7. html级联选择器,级联选择器
  8. FPGA可以转行数字IC验证吗?
  9. excel批量将数字转为文本格式
  10. Framework篇 - PackageManagerService 启动分析