热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

android开发分享Android如何解决虚拟按键栏遮挡问题

最近在公司的项目中,华为用户反馈出了一个问题,华为手机底部有虚拟按键栏把应用的底部内容遮挡住了,现在已经把这个问题解决了,记录一下,给各位遇到相同问题的童鞋做一下参

最近在公司的项目中 , 华为用户反馈出了一个问题 , 华为手机底部有虚拟按键栏把应用的底部内容遮挡住了 , 现在已经把这个问题解决了 , 记录一下,给各位遇到相同问题的童鞋做一下参考.

这里的解决方案还是相对比较简单的,首先判断用户的手机是否存在虚拟按键,若存在,那么就获取虚拟按键的高度,然后再用代码设置相同高度的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 虚拟按键栏遮挡的资料请关注<编程笔记>其它相关文章!


推荐阅读
  • 短视频app源码,Android开发底部滑出菜单首先依赖三方库implementationandroidx.appcompat:appcompat:1.2.0im ... [详细]
  • 使用Tkinter构建51Ape无损音乐爬虫UI
    本文介绍了如何使用Python的内置模块Tkinter来构建一个简单的用户界面,用于爬取51Ape网站上的无损音乐百度云链接。虽然Tkinter入门相对简单,但在实际开发过程中由于文档不足可能会带来一些不便。 ... [详细]
  • 本文介绍了如何在 Spring Boot 项目中使用 spring-boot-starter-quartz 组件实现定时任务,并将 cron 表达式存储在数据库中,以便动态调整任务执行频率。 ... [详细]
  • 本文将介绍如何在混合开发(Hybrid)应用中实现Native与HTML5的交互,包括基本概念、学习目标以及具体的实现步骤。 ... [详细]
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • PBO(PixelBufferObject),将像素数据存储在显存中。优点:1、快速的像素数据传递,它采用了一种叫DMA(DirectM ... [详细]
  • 本文介绍了 Android 开发中常用的滚动视图组件 ScrollView 和 HorizontalScrollView 的基本用法和注意事项,帮助开发者更好地处理屏幕内容超出显示范围的情况。 ... [详细]
  • iOS snow animation
    CTSnowAnimationView.hCTMyCtripCreatedbyalexon1614.Copyright©2016年ctrip.Allrightsreserved.# ... [详细]
  • Java设计模式详解:解释器模式的应用与实现
    本文详细介绍了Java设计模式中的解释器模式,包括其定义、应用场景、优缺点以及具体的实现示例。通过音乐解释器的例子,帮助读者更好地理解和应用这一模式。 ... [详细]
  • 本文介绍了 Go 语言中的高性能、可扩展、轻量级 Web 框架 Echo。Echo 框架简单易用,仅需几行代码即可启动一个高性能 HTTP 服务。 ... [详细]
  • 本文详细介绍了 Spark 中的弹性分布式数据集(RDD)及其常见的操作方法,包括 union、intersection、cartesian、subtract、join、cogroup 等转换操作,以及 count、collect、reduce、take、foreach、first、saveAsTextFile 等行动操作。 ... [详细]
  • 本文详细介绍了 com.apollographql.apollo.api.internal.Optional 类中的 orNull() 方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。 ... [详细]
  • WPF项目学习.一
    WPF项目搭建版权声明:本文为博主初学经验,未经博主允许不得转载。一、前言记录在学习与制作WPF过程中遇到的解决方案。使用MVVM的优点是数据和视图分离,双向绑定,低耦合,可重用行 ... [详细]
  • 稀疏数组是一种用于存储和处理大部分元素为零或相同值的数组的技术。通过记录非零元素的位置和值,稀疏数组可以显著减少存储空间和提高处理效率。 ... [详细]
  • 本文主要介绍如何使用标签来优化Android应用的UI布局,通过减少不必要的视图层次,提高应用性能。 ... [详细]
author-avatar
huangyong黄勇_513
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有