现在的手机比较流行底部带虚拟按键,比如华为、nexus,一般情况下对开发一个APP没啥影响,但是不一般情况下就会有影响的,比如全屏录像功能,

用简单的方法直接获取camera支持的手机屏幕分辨率然后用SurfaceView全屏渲染出来,这时由于底部虚拟按键占用了一定的高度的屏幕空间,这时图像会被压缩,

特别是拍头像时会很明显,如图:

接下来加上几个方法就OK 了,代码如下

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

/**

   * 隐藏虚拟按键,并且全屏

 */

  protected void hideBottomUIMenu(){

    //隐藏虚拟按键,并且全屏

    if (Build.VERSION.SDK_INT > 11 && Build.VERSION.SDK_INT < 19) { // lower api

      View v = this.getWindow().getDecorView();

      v.setSystemUiVisibility(View.GONE);

    } else if (Build.VERSION.SDK_INT >= 19) {

      //for new api versions.

      View decorView = getWindow().getDecorView();

      int uiOptions = 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 nav bar

//          | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar

          | View.SYSTEM_UI_FLAG_IMMERSIVE;

      decorView.setSystemUiVisibility(uiOptions);

      getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);

    }

  }

检查是否存在虚拟按键栏

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

/**

   * 检查是否存在虚拟按键栏

   * @param context

   * @return

   */

  public static boolean hasNavBar(Context context) {

    Resources res = context.getResources();

    int resourceId = res.getIdentifier("config_showNavigationBar", "bool", "android");

    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;

  }

hideBottomUIMenu() 在onCreate()里面调用就可以了,之后的效果,底部虚拟按键也成为了SurfaceView的一部分,不仅仅只是透明了哦,如图:

当然以上代码不一定只能用于录像,相关功能需求都可以使用。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

您可能感兴趣的文章:

  • Android实现状态栏和虚拟按键背景颜色的变化实例代码详解
  • Android隐藏手机底部虚拟按键的方法
  • Android实现手机游戏隐藏虚拟按键
  • Android 虚拟按键适配动态调整布局的方法
  • Android适配底部虚拟按键的方法详解
  • android底层去掉虚拟按键的实例讲解
  • Android dialog 去除虚拟按键的解决方法
  • 解决Android 虚拟按键遮住了页面内容的问题
  • Android 虚拟按键与沉浸式的适配方法
  • Android如何解决虚拟按键栏遮挡问题

Android实现隐藏手机底部虚拟按键相关推荐

  1. android 隐藏手机底部虚拟按键

    今天,简单讲讲android如何隐藏手机下面的虚拟按键. 其实,自己在做界面适配时,老是发现了华为手机存在适配的问题,主要就是华为手机有一个底部的虚拟按键占用了界面的部分空间,所以在网上搜索了如何隐藏 ...

  2. 安卓平板隐藏虚拟按键_Android实现隐藏手机底部虚拟按键

    现在的手机比较流行底部带虚拟按键,比如华为.nexus,一般情况下对开发一个APP没啥影响,但是不一般情况下就会有影响的,比如全屏录像功能, 用简单的方法直接获取camera支持的手机屏幕分辨率然后用 ...

  3. android 华为底部虚拟键盘隐藏,Android隐藏手机底部虚拟按键的方法

    现在的Android手机有好多底部带虚拟按键,比如华为.nexus.魅族等等,一般情况下对APP没啥影响,但是有时候就必须要强制隐藏. 例如:游戏的时候,拍照的时候. 接下来加上几个方法就OK 了,代 ...

  4. android 系统隐藏和显示虚拟按键的几种方法

    几种动态显示虚拟按键的方法 上一篇从源码来看了虚拟按键的加载显示流程 android 虚拟按键流程分析,今天来看看虚拟的几种动态显示和隐藏的方法. 其实说到虚拟按键,对于市面上面的很多手机,各种需求都 ...

  5. 解决输入法遮挡布局和华为手机底部虚拟按键遮挡底部界面的方法

    先上最终的代码: public class AndroidWorkaround {public static void assistActivity(View content) {new Androi ...

  6. Android完全隐藏导航键/虚拟按键和状态栏

    之前有做过一个需求,在某一个界面隐藏掉home,主页,返回键这几个虚拟按键以及状态栏,就是要全屏显示,刚开始隐藏了,但是在有用户交互的时候,导航键又显示出来了,纠结了下,最后解决了,现在总结下 1.首 ...

  7. android dialog隐藏虚拟按键,关于此框架在BottomSheetDialogFragment使用时,华为手机底部虚拟按键弹出与隐藏时输入框位置不贴键盘...

    我这边试过还是不行,而且我们ui是要dialog不全屏的,下面附上代码 public void onStart() { super.onStart(); Dialog dialog = getDial ...

  8. h5+、mui创建手机APP,华为等手机底部虚拟按键问题

    网址:http://ask.dcloud.net.cn/question/56517 2019年7月15日03:07:38更新,此解决方式会导致文件上传功能炸掉,可以去我7.15的博客查看解决方式 转 ...

  9. android 隐藏底部虚拟按键

    隐藏底部虚拟按键,但是如果你在底部网上滑动还是显示的出来的, 我在项目中写在了BaseActivity里面,大致如下 ,我这用在贩卖机上面,手机上的app开发还真没用过, 下面测试可以使用,已经使用在 ...

最新文章

  1. [JAVA EE]常用的实体类注解
  2. python给空列表赋值_python – 赋值前引用的局部变量’list’
  3. 图像拼接--Creating full view panoramic image mosaics and environment maps
  4. HDFS副本设置——默认3
  5. 题目1182:统计单词
  6. 【每周论文推荐】 初入深度学习CV领域必读的几篇文章
  7. 关联规则 java_Java实现的关联规则算法
  8. myeclipse java注释模板_Eclipse/MyEclipse Java注释模板设置详解 ---转载自百度空间
  9. jQuery 中$('.classname').on('click',function(){});与$(document).on('click','.classname',function(){});
  10. 项目管理的三大目标即时间、成本和质量
  11. Centos 6.8 配置mysql数据库主从同步
  12. [ZJOI2008]生日聚会
  13. PS 怎么去掉图片上的文字
  14. drain open 线与_Open-Drain与Push-Pull
  15. 1062 最简分数 (20 分)
  16. DELL Inspiron 15 5585 AMD Ryzen™ 5 3500U 解除功耗频率限制 性能起飞(文章失效:最新方案重装系统或者删除dell全套)
  17. Centos用mail命令登录163邮箱发邮件
  18. supervisord 简介
  19. win7 APPCRASH(解决方法)(转)
  20. Win10:快捷键整理,嗖嗖地办公

热门文章

  1. java 生成根据图片内容生成图片包含格式有【png jepg GIF tiff wbmp】
  2. 设计模式之代理模式(第二篇)
  3. c语言 快排,C语言 快排函数
  4. Youtube 视频下载
  5. 广告系统,业务与架构细节
  6. 双十一快件近40亿再创历史新高;疫情挑战下中国受访者对科学的信任度位居全球第一 | 美通企业日报...
  7. 现在人工智能自动修复老照片的效果有好?
  8. 为什么射极输出器的输入电阻跟负载R(L)有关?
  9. Papi酱: 左手奶瓶右手尿布× 左手papitube右手娱乐圈√
  10. 如何查看电脑是否已经虚拟化