问题:在实现ViewPager+Fragment+侧滑栏的界面时,华为搭载Android5.0以上操作系统的手机出现底部虚拟导航栏挡住布局。如下图所示:

问题解决后:

尝试

在实现这个功能的时候,我发现底部虚拟导航栏遮盖布局不同的情况对应不同的解决方法。当没有侧滑功能的时候,主要有一下两种:

1. OnCreate()方法中不能出现下边的代码:

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

 就是设置导航栏半透明,这会使布局向上向下扩展至整个屏幕,导航栏则覆盖在布局上边,就会导致导航栏挡住布局。有的说法是换成设置状态栏半透明,如下边的代码:

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

 这种做法其实是不好的,属于伤敌一千自伤八百。因为,我们设置这个属性一般是为了实现沉浸式状态栏的,去掉了第一种代码,就不能实现了。比如说我使用了SystemBarTint第三方框架来实现沉浸式状态栏。这时就需要用到方法2了。

2. 在布局的根布局中添加android:fitsSystemWindows=”true”

比如:

<LinearLayout    xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:fitsSystemWindows="trueandroid:orientation="vertical"><View        android:layout_width="match_parent"android:layout_height="@dimen/theme_divide_height"android:background="#3D81D6"/></LinearLayout>

我们看一下,Android官方API对这个属性的解释:

Boolean internal attribute to adjust view layout based on system windows such as the status bar.
If true, adjusts the padding of this view to leave space for the system windows. Will only take effect if this view is in a non-embedded activity.May be a boolean value, such as "true" or "false".

翻译:
 布尔内部属性,基于系统窗口(如状态栏)来调整视图布局。如果为true,则调整此视图的填充,以便为系统窗口留出空间。只有在非嵌入activity中此视图才会生效。

 这个方法就使系统窗口可以自动调整,可以实现需求。但是如果界面中有侧滑菜单的,并且实现了顶部导航栏透明,和底部导航栏颜色填充的话,就需要下边的方法了。

有效方法

在 style.xml 文件中的项目的主题样式中添加

<item name="android:windowDrawsSystemBarBackgrounds">false</item>

我们看一下,Android官方API对这个属性的解释:

Flag indicating whether this Window is responsible for drawing the background for the system bars. If true and the window is not floating, the system bars are
drawn with a transparent background and the corresponding areas in this window are filled with the colors specified in statusBarColor and navigationBarColor. Corresponds to FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS.May be a boolean value, such as "true" or "false".

翻译:
 标志是指示此窗口是否负责绘制系统栏的背景。如果真正的窗口不浮,系统栏被画在这个窗口透明背景和相应领域内statusbarcolor和navigationbarcolor指定的颜色。对应于flag_draws_system_bar_backgrounds。

 可以看出该属性是负责绘制系统栏的背景的,如果真正的窗口被遮盖了,设置true,则会绘制系统栏的背景,使真正的窗口上移,不被遮挡住。

 如果你的项目兼容的最低版本小于21的话 ,会红线提示错误,虽然可以运行但是代码无效。解决方法是:在提示错误的代码上Alt+Enter,会提示:

 选择第一个,就会自动生成适配Android 21的values文件夹:values-v21,里边有包含该属性的styles.xml文件。之前添加的报错的属性就可以删掉了。当然,你也可以自己新建文件夹,自己实现。如下图:

如果不知道项目的主题样式在哪儿,可以用下边的查找方式:

 打开资源配置文件AndroidManifest.xml,跟进属性 Android:theme=”@style/AppTheme”中的style:

 tips:android:windowDrawsSystemBarBackgrounds在Android官方API文档版本21以上的可以查到,下边附一个我使用的文档的连接:
最新版Android官方API文档

华为底部虚拟导航栏挡住布局相关推荐

  1. Android进阶之路 - 顶部状态栏、底部虚拟导航栏相关操作

    快过年了,2018希望我们每个人都健康,开心,同时继续上进 ! 2020补充:基本包含了我几年在开发中用到的关于顶部状态栏和底部导航栏的绝大部分功能 ~ 顶部状态栏 状态栏是否可见 获取状态栏高度 隐 ...

  2. 成品app直播源码,全屏并且去掉底部虚拟导航栏

    成品app直播源码,全屏并且去掉底部虚拟导航栏 @Overridepublic void onWindowFocusChanged(boolean hasFocus) {super.onWindowF ...

  3. Android隐藏底部虚拟导航栏及系统状态栏终极方案

    前言: 笔者最近做一个平板的项目需要彻底隐藏系统状态栏及底部虚拟导航栏从而达到全屏的效果,试了很多方案都不太好,有些虽然能达到类似效果,但会因为其他因素例如弹框,手上滑而失去效果.在大部分项目是够用的 ...

  4. 安卓开发——如何完美隐藏底部虚拟导航栏

    对于如何隐藏底部虚拟按键,google官方给的解决办法: View decorView = getWindow().getDecorView(); // Hide both the navigatio ...

  5. Android APP全屏显示(去掉顶部状态栏和底部虚拟导航栏)以及使用AndroidAutoSize实现自适应

    全屏显示 1.AndroidManifest设置APP样式android:theme,我项目中的Activity都是继承自Activity,如果是继承自AppCompatActivity,这里样式需要 ...

  6. android功能导航布局,Android全面屏虚拟导航栏适配

    手机正朝着全面屏的方向演进,与此同时也给开发者带来了很多适配上的新问题,虚拟导航栏就是其中一个.最近在糗百的项目中,就有相关的适配问题,我查阅了目前关于虚拟导航栏适配的相关文章,基本上在全面屏手机里都 ...

  7. android 窗口导航,Android全面屏虚拟导航栏适配

    手机正朝着全面屏的方向演进,与此同时也给开发者带来了很多适配上的新问题,虚拟导航栏就是其中一个.最近在糗百的项目中,就有相关的适配问题,我查阅了目前关于虚拟导航栏适配的相关文章,基本上在全面屏手机里都 ...

  8. android 虚拟导航监听,Android另类判断NavigationBar虚拟导航栏状态

    好久没码字了,所以出来冒个泡 一直用着华为的手机,从一开始就觉得华为的虚拟导航栏用着还是挺顺手的,后来发现越来越多的机子都开始使用起来,查看源码发现,虚拟导航栏是属于SystemUI的一部分. 再一看 ...

  9. android解决底部导航栏遮挡问题,Android虚拟导航栏遮挡底部的输入框的解决方法...

    1.场景还原 最近忙着app的适配,在这个过程问题中,各种机型的奇葩问题都出来了,适配真尼玛痛苦!今天就oppo机型虚拟导航栏遮挡底部的输入框的问题作个记录. ① 在该Activity的根layout ...

最新文章

  1. 【C/C++】计时函数比较
  2. SharpWebMail介绍和安装(转)
  3. 【VC基础】 6、VC条件定价
  4. macOS 10.13 安装Virtualbox失败
  5. 2019-03-18-算法-进化(反转链表)
  6. 读写Excel 用 xlsxwriter,openpyxl 更灵活
  7. gin+vue的前后端分离开源项目
  8. jstack 脚本 自动日志_深入理解jstack日志
  9. usb4java android,USB audio on Android platform
  10. ubuntu16.04多GPU风扇转速调整
  11. 笔记本安装黑苹果MacOS BigSur记录
  12. pythonstdin_Windows上Python读取stdin出错
  13. AD16快速上手指南(AD16为例)
  14. 谷歌浏览器Chrome 100即将发布,但可能无法正常使用?
  15. 机器学习(周志华) 第一章 引言
  16. js实现音频可视化波形图
  17. python证明冰雹猜想_如果冰雹猜想被证明了。那数学会有很大突破吗?
  18. 方便、免费的PDF在线处理网站汇总:PDF合并、文字编辑、页面提取与删除、格式转换…
  19. OpenStack双网卡、多节点搭建
  20. Android版火狐无法同步,Firefox 同步 故障解决

热门文章

  1. 判断回文(Python)
  2. python代码学习-数据处理图片加遮挡、噪声、模糊
  3. hadoop关键进程
  4. api与implementation的区别
  5. Linux下Oracle 12c的卸载
  6. 20172307 2017-2018-2 《程序设计与数据结构》第9 周学习总结
  7. 抓包工具 - Fiddler(详细介绍)
  8. Java——递归调用
  9. strcpy 函数的实现
  10. Hadoop阅读笔记(四)——一幅图看透MapReduce机制