Android适配底部虚拟按键的方法详解

发布时间:2020-10-09 05:26:12

来源:脚本之家

阅读:171

作者:yuanzhihui123

最近项目进行适配的时候发现部分(如华为手机)存在底部虚拟按键的手机会因为虚拟按键的存在导致挡住部分界面,因为需要全屏显示,故调用虚拟按键隐藏方法使之隐藏,然而发现出现如下问题:

手动操作隐藏虚拟按键后出现长白条区域

不自动隐藏

滑出状态栏后虚拟按键也出来,状态栏隐藏后虚拟却不跟着隐藏

在没有虚拟按键的设备上影响了SurfaceView全屏显示图传(原本全屏显示的图传在切出去再进来时变成了小屏显示)

通过google了很多方法并尝试终于解决了这个问题,达到如下效果:

每次进入界面时虚拟按键自动隐藏

手动滑出虚拟按键,当不操作屏幕时定时自动隐藏

当滑出状态栏时虚拟按键会跟着出来,也要处理让其和状态栏在不操作时自动隐藏

具体代码如下操作:

public class TestActivity extends AppCompatActivity {

private View decorView;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_test);

//获取顶层视图

decorView = getWindow().getDecorView();

}

@Override

protected void onStart() {

//调用配置

init();

super.onStart();

}

private void init(){

int flag = View.SYSTEM_UI_FLAG_LAYOUT_STABLE

| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION

| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN

| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide

| View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar

| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;

//判断当前版本在4.0以上并且存在虚拟按键,否则不做操作

if (Build.VERSION.SDK_INT < 19 || !checkDeviceHasNavigationBar()) {

//一定要判断是否存在按键,否则在没有按键的手机调用会影响别的功能。如之前没有考虑到,导致图传全屏变成小屏显示。

return;

} else {

// 获取属性

decorView.setSystemUiVisibility(flag);

}

}

/**

* 判断是否存在虚拟按键

* @return

*/

public boolean checkDeviceHasNavigationBar() {

boolean hasNavigationBar = false;

Resources rs = 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;

}

@Override

public boolean onTouch(View v, MotionEvent event) {

return false;

}

注:有些时候要手动去调用上述代码中init()配置方法隐藏按键。如弹出dialog时虚拟按键会出来,此时要手动调用隐藏,还有弹出键盘等等。

记录一下,以后遇到此类问题可供参考。

以上这篇Android适配底部虚拟按键的方法详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持亿速云。

android底部滑动出现虚拟按键,Android适配底部虚拟按键的方法详解相关推荐

  1. 三星 android miracast,三星S7 edge连接电视、显示器、投影仪的方法详解

    说到安卓手机接电视,大多数人会想到MHL功能,但经过楼主实测,S7EDGE并不具备MHL功能: 楼主通过三星 S2用的绿联MHL转hdmi线连接s7edge与电视没有任何显示, 实际上还是有多种方法( ...

  2. 青花瓷抓包工具如何对Android手机https请求抓包及华为手机安装Charles证书方法详解!

    网上搜索了很多文档,这两篇是写的比较全面的,整个流程看完,你就会安装使用了! 参考:windows下使用Charles工具如何对android手机https请求进行抓包 参考:Android安装Cha ...

  3. 电脑上怎么清空我的android手机,缓存数据可以清除吗?手机与电脑清除方法详解...

    我们在使用手机和电脑的时候,如果遇到空间内存不足的话,总会选择清理垃圾,从而释放空间,以保证它们的运行速度以及使用的效果,有一些人疑惑缓存数据可以清除吗?其实有的是可以进行清除的,而有的是不可以进行清 ...

  4. tlwdr6300虚拟服务器,TL-WDR6300怎么设置?TP-Link TL-WDR6300设置方法详解

    大家都知道,作为国内最大的路由器厂商,TP-Link路由器相信很多朋友都不会陌生,最近家中刚好换了一台新款TP-Link TL-WDR6300无线路由器,配备2.4Ghz和5Ghz双频WiFi,下面小 ...

  5. Android初级,实现网易云音乐歌曲列表界面效果,播放界面效果,ListView,ViewPager方法详解

    初学Android初级,第一篇博客文章,如有错误,还望批评指正! 本文主要内容以网易云音乐歌曲列表界面效果代码,播放音乐界面效果代码为主,并将ListView和ViewPager作为实现界面滑动功能的 ...

  6. android listview ontouchlistener,Android ListView监听滑动事件的方法(详解)

    ListView的主要有两种滑动事件监听方法,OnTouchListener和OnScrollListener 1.OnTouchListener OnTouchListener方法来自View中的监 ...

  7. android禁止下拉刷新,Android开发之无痕过渡下拉刷新控件的实现思路详解

    相信大家已经对下拉刷新熟悉得不能再熟悉了,市面上的下拉刷新琳琅满目,然而有很多在我看来略有缺陷,接下来我将说明一下存在的缺陷问题,然后提供一种思路来解决这一缺陷,废话不多说!往下看嘞! 1.市面一些下 ...

  8. Android群英传笔记——第十二章:Android5.X 新特性详解,Material Design UI的新体验

    Android群英传笔记--第十二章:Android5.X 新特性详解,Material Design UI的新体验 第十一章为什么不写,因为我很早之前就已经写过了,有需要的可以去看 Android高 ...

  9. android json mysql_Android通过json向MySQL中读写数据的方法详解【读取篇】

    本文实例讲述了Android通过json向MySQL中读取数据的方法.分享给大家供大家参考,具体如下: 首先 要定义几个解析json的方法parseJsonMulti,代码如下: private vo ...

最新文章

  1. linux 调优系列
  2. Mongodb定时备份脚本和清除脚本
  3. mysql hy000 2013_MySQLERROR2013(HY000)错误解决方法
  4. 表单html遇到的问题及处理,Web前端开发中常见问题及解决方案
  5. Windows server 2003 ××× 配置实例(Site to Site)
  6. Atitit 常用数据类型有哪些 目录 1.1. 数值类型 整数 小数 自增整数 1 1.2. 货币类型 1 1.3. 字符类型 字符串 2 1.4. 日期/时间类型 时间戳 2 1.5. Ur
  7. python爬虫电影资源_python爬虫批量获取最新电影资源
  8. 啊哈C语言 第四章 【代码】【习题答案】
  9. 利用matlab实现卷积实验报告,matlab卷积实验报告(共8篇).doc
  10. 手机远程锁定计算机,手机怎么控制电脑 手机远程控制电脑关机方法
  11. 项目管理十大过程思维导图
  12. seo网站优化,SEO优化费用
  13. OVM Manager
  14. 清华大学计算机系张昕,程序设计语言的研究与发展——如何推进国内程序设计语言的教育和研究?丨CNCC技术论坛...
  15. Semi-Supervised Semantic Segmentation Using Unreliable Pseudo-Labels
  16. DPDK支持的硬件:CPU、网卡NIC、加密引擎、基带加速器
  17. APP消息推送测试点
  18. 20170425めも
  19. 【ADB】设置adb输入法
  20. 解决浏览器下用Debug Flash Player 访问游戏崩溃问题(2012-2-19)

热门文章

  1. android 程序数据目录,Android APP 数据存放目录
  2. Fragstats景观分析研究
  3. paypal创始人_艾问PayPal创始人彼得·蒂尔(无删减)
  4. 缺陷报告.定义,报告,核心要素
  5. 2021年机修钳工(中级)考试题库及机修钳工(中级)试题解析
  6. 基于 SIP 的会议系统框架(草稿)
  7. ElasticSearch索引模块
  8. 输入两个数求之间的平方数
  9. Jungle Scout中国市场首发亚马逊FBA卖家百万美金案例中文版详解
  10. java清空购物车方法_Javaweb网上商城项目实战(21)删除和清空购物车