Android虚拟按键栏处理方案
最近在公司的项目中 , 华为用户反馈出了一个问题 , 华为手机底部有虚拟按键栏把应用的底部内容遮挡住了 , 现在已经把这个问题解决了 , 记录一下,给各位遇到相同问题的童鞋做一下参考.
处理虚拟按键栏工具类:
public class ScreenUtils {//获取虚拟按键的高度public static int getNavigationBarHeight(Context context) {int result = 0;if (hasNavBar(context)) {Resources res = context.getResources();int resourceId = res.getIdentifier("navigation_bar_height", "dimen", "android");if (resourceId > 0) {result = res.getDimensionPixelSize(resourceId);}}return result;}/*** 检查是否存在虚拟按键栏** @param context* @return*/@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)public static boolean hasNavBar(Context context) {Resources res = context.getResources();//读取系统资源函数int resourceId = res.getIdentifier("config_showNavigationBar", "bool", "android");//获取资源idif (resourceId != 0) {boolean hasNav = res.getBoolean(resourceId);// check override flagString sNavBarOverride = getNavBarOverride();if ("1".equals(sNavBarOverride)) {hasNav = false;} else if ("0".equals(sNavBarOverride)) {hasNav = true;}return hasNav;} else { // fallbackreturn !ViewConfiguration.get(context).hasPermanentMenuKey();}}/*** 判断虚拟按键栏是否重写* @return*/private static String getNavBarOverride() {String sNavBarOverride = null;if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {try {Class c = Class.forName("android.os.SystemProperties");Method m = c.getDeclaredMethod("get", String.class);m.setAccessible(true);sNavBarOverride = (String) m.invoke(null, "qemu.hw.mainkeys");} catch (Throwable e) {}}return sNavBarOverride;}
}
调用工具类方法 , 获取虚拟按键高度:
//处理虚拟按键
//判断用户手机机型是否有虚拟按键栏 if(ScreenUtils.hasNavBar(getApplicationContext())){setNavigationBar();}//处理虚拟按键private void setNavigationBar() {int barHeight = ScreenUtils.getNavigationBarHeight(getApplicationContext());LinearLayout.LayoutParams barParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT);TextView tv = new TextView(this);tv.setHeight(barHeight);tv.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);tv.setBackgroundColor(Color.BLACK);llNavigationBar.addView(tv,barParams);}
小编整理了一份Android电子书籍,需要的童鞋关注底部公众号(longxuanzhigu)回复:“e_books” 即可获取哦!
以下是个人公众号(longxuanzhigu),之后发布的文章会同步到该公众号,方便交流学习Android知识及分享个人爱好文章:
Android虚拟按键栏处理方案相关推荐
- android按钮被遮住,解决Android 虚拟按键遮住了页面内容的问题
在启动页的时候华为手机虚拟按键遮挡住了启动页下面的字找了找解决办法,特地记录一下 第一种办法:扩展虚拟按键 //状态栏 @ 顶部getWindow().addFlags(WindowManager.L ...
- android 覆盖虚拟按键,解决Android 虚拟按键遮住了页面内容的问题
在启动页的时候华为手机虚拟按键遮挡住了启动页下面的字找了找解决办法,特地记录一下 第一种办法:扩展虚拟按键 //状态栏 @ 顶部getWindow().addFlags(WindowManager.L ...
- android 虚拟按键源码流程分析
android 虚拟按键流程分析 今天来说说android 的虚拟按键的源码流程.大家都知道,android 系统的状态栏,虚拟按键,下拉菜单,以及通知显示,keyguard 锁屏都是在framewo ...
- uniapp中隐藏Android虚拟按键
前言: uniapp中如何隐藏Android虚拟按键 (如下图) 解决: 通过h5-plus中的方法,plusready 后调用 https://www.html5plus.org/doc/zh_cn ...
- Android 虚拟按键隐藏或显示之后共享元素动画异常解决方案
背景 本篇算是共享元素的第三篇文章.主要还是因为第一篇才会衍生出来了第二篇和第三篇文章,后两篇均属于bug的分析和解决. 1.Android 仿微信朋友圈图片拖拽返回 2.Android 共享元素动画 ...
- android 虚拟按键自定义,Android手机底部栏虚拟按键的操作
防止屏幕长度和主流不符导致底部出现黑色空白区域,应该在AndroidManifest.xml文件中,添加如下代码: 实例图.png 至于在Application中添加 android:resizeab ...
- android 虚拟按键挡住布局,Android 关于导航栏(虚拟按键)遮挡PopupWindow底部布局的问题...
我们自定义popupWindow的时候,一般会设置这些参数 setContentView(contentView); //设置高度为屏幕高度 setWidth(UIUtils.getScreenHei ...
- Android 虚拟按键与沉浸式的适配
根据公司产品的要求,app要实现全屏模式,也就是4.4以后的所谓的沉浸式. 在values-v19和values-v21的styles里添加以下代码,实现19以上的系统的沉浸式: <style ...
- android 虚拟按键挡住布局,Android 虚拟按键遮住了页面内容解决办法
在启动页的时候华为手机虚拟按键遮挡住了启动页下面的字找了找解决办法,特地记录一下 第一种办法:扩展虚拟按键 //状态栏 @ 顶部getWindow().addFlags(WindowManager.L ...
最新文章
- 基本类型和引用类型的传值
- Java的新项目学成在线笔记-day13(九)
- access创建窗体特别慢_64位Access运行速度很慢的解决办法
- 关于C#中使用SQLDMO来获取数据库中的一些操作
- python day08
- Query Layer介绍
- C语言 float、double数据在内存中的存储方式
- oo第一次博客-三次表达式求导的总结与反思
- 1134 Vertex Cover
- 制作stick侧边栏导航效果
- Android-SDK下载及安装配置教程
- 逻辑回归实现鸢尾花分类
- 腾讯云服务器部署教程
- 《非凡的公主希瑞》(She-Ra Princess of Power)[93集全][数码修复][国英双语][RMVB]
- ffmpeg 从现有视频中截取一段
- 2018版苹果开发者设置内购(App内购买项目)、税务、银行问题,开通苹果支付
- Matplotlib--palette调色板
- 家用计算机的发展历史,计算机发展简史
- 软件项目生命周期模型
- CHIL-SQL-JOIN