作者:huangyong黄勇_513 | 来源:互联网 | 2023-09-23 00:31
最近在公司的项目中,华为用户反馈出了一个问题,华为手机底部有虚拟按键栏把应用的底部内容遮挡住了,现在已经把这个问题解决了,记录一下,给各位遇到相同问题的童鞋做一下参
最近在公司的项目中 , 华为用户反馈出了一个问题 , 华为手机底部有虚拟按键栏把应用的底部内容遮挡住了 , 现在已经把这个问题解决了 , 记录一下,给各位遇到相同问题的童鞋做一下参考.
这里的解决方案还是相对比较简单的,首先判断用户的手机是否存在虚拟按键,若存在,那么就获取虚拟按键的高度,然后再用代码设置相同高度的textview,这样手机的虚拟按键就不会将底部的内容遮挡住了。
处理虚拟按键栏工具类:
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");//获取资源id if (resourceid != 0) { boolean hasnav = res.getboolean(resourceid); // check override flag string snavbaroverride = getnavbaroverride(); if ("1".equals(snavbaroverride)) { hasnav = false; } else if ("0".equals(snavbaroverride)) { hasnav = true; } return hasnav; } else { // fallback return !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如何解决虚拟按键栏遮挡问题的详细内容,更多关于android 虚拟按键栏遮挡的资料请关注<编程笔记>其它相关文章!