Android 9.0 显示系统导航栏(左/右/底部)

显示系统导航栏 一般有:HOME  BACK  最近应用列表 等组成。

先看下效果图:

显示在底部(最常见的做法):

显示在右边(平板):

(请忽略导航栏上的按钮重叠在一起的问题:该部分需要到SystemUI中修改,这里不做说明)

显示在左边(车机等物联网设备):

实现导航栏显示的位置:
1.需要修改配置文件
2.修改导航栏的大小(横-高/竖-宽)
源码路径:
/android9.0/frameworks/base/core/res/res/values中的:

1.config.xml
<!-- Whether a software navigation bar should be shown. NOTE: in the future this may be

autodetected from the Configuration. -->

<bool name="config_showNavigationBar">true</bool>

2.dimens.xml
<!-- Height of the bottom navigation / system bar. -->

<dimen name="navigation_bar_height">93px</dimen>

<!-- Height of the bottom navigation bar in portrait; often the same as @dimen/navigation_bar_height -->

<dimen name="navigation_bar_height_landscape">93px</dimen>

<!-- Width of the navigation bar when it is placed vertically on the screen -->

<dimen name="navigation_bar_width">93px</dimen>

<!-- Height of the bottom navigation / system bar in car mode. -->

<dimen name="navigation_bar_height_car_mode">93px</dimen>

<!-- Height of the bottom navigation bar in portrait; often the same as

@dimen/navigation_bar_height_car_mode -->

<dimen name="navigation_bar_height_landscape_car_mode">93px</dimen>

<!-- Width of the navigation bar when it is placed vertically on the screen in car mode -->

<dimen name="navigation_bar_width_car_mode">93px</dimen>

导航栏区域是由PhoneWindowManager来处理的。
源码路径:
/android9.0/frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java

由以下3个变量来处理(是否显示和显示的位置)
boolean mHasNavigationBar = false;

boolean mNavigationBarCanMove = false; // can the navigation bar ever move to the side?

@NavigationBarPosition

int mNavigationBarPosition = NAV_BAR_BOTTOM;

因此我们只需要修改这些属性就可以达到目的。

第一部分:两个布尔值的赋值决定是否显示(mHasNavigationBar)/已经是否允许显示在左右两边(mNavigationBarCanMove)

第二部分:决定显示的位置(底部/左/右)

如下图中:强行打开导航栏


编译验证
终端输入如下指令:

source build/envsetup.sh

lunch ?平台

make framework-res

make services

把编译生成的以下3个文件推到系统对应目录下:
framework-res.apk

services.jar

oat

打开终端输入如下指令:

MacBook-Pro ~ % adb root;adb remount;adb push /xxx/out/target/product/xxxx/system/framework/framework-res.apk /xxx/out/target/product/xxxx/system/framework/oat /xxx/out/target/product/xxxx/system/framework/services.jar  /system/framework

adbd is already running as root

remount succeeded

/xxx/out/target/product/xxxx/system/framework/framework-res.apk: 1 file pushed, 0 skipped. 5.9 MB/s (28286283 bytes in 4.581s)

/xxx/out/target/product/xxxx/system/framework/oat/: 13 files pushed, 0 skipped. 5.6 MB/s (53523092 bytes in 9.143s)

/xxx/out/target/product/xxxx/system/framework/services.core.jar: 1 file pushed, 0 skipped. 9.2 MB/s (4019568 bytes in 0.419s)

15 files pushed, 0 skipped. 5.6 MB/s (85828943 bytes in 14.571s)

MacBook-Pro ~ % adb reboot

Android 9.0 显示系统导航栏(左/右/底部)相关推荐

  1. ios15从隐藏系统导航栏页面进入显示系统导航栏页面后,期望系统导航栏背景色为白色,但是导航栏背景变成黑色问题

    ios15从隐藏系统导航栏页面进入显示系统导航栏页面后,期望系统导航栏背景色为白色,但是导航栏背景变成黑色问题. 经过多次分析是因为底层大背景被设置了默认颜色引起,把它设置成对应白色就可以了: sel ...

  2. [九鼎RK3399Pro] Android 8.1定制系统导航栏和状态栏显示和隐藏可控制

    我们的app跑在RK3399Pro上面,是放在一个公共场合使用,所以把底部的 返回,HOME,MENU键都隐藏掉,并且上部导航栏下拉功能也要取消. 代码我是参考Firefly的代码写的. 实现了一下功 ...

  3. Android 7.0 SystemUI 状态/导航栏的隐藏与显示

    平台 Android 7.1 + RK3288 概述 从Android 4.4开始支持沉浸式全屏体验,在沉浸式全屏模式下,状态栏. 虚拟按键动态隐藏,应用可以使用完整的屏幕空间,按照 Google 的 ...

  4. Android 5.0状态栏和导航栏

    Material Design推出之后,app中也開始沿用这样的风格 今天来说一下状态栏颜色设置,在4.4的时候推出了透明状态栏和导航栏.在不使用第三方库的情况下,4.4还是没有全然解决存在actio ...

  5. Android导航栏自动隐藏,Android隐藏和显示虚拟导航栏

    隐藏导航栏 /** * 隐藏虚拟按键,并且全屏 */ public static void hideBottomNav(Activity activity) { View decorView = ac ...

  6. Android 11.0 SystemUI导航栏固定在底部显示的修改

    目录 1.概述 2.SystemUI导航栏固定在底部显示的修改的相关代码

  7. [高通SDM450][Android9.0]动态控制虚拟导航栏显示与隐藏

    文章目录 开发平台基本信息 问题描述 解决方法 开发平台基本信息 芯片: SDM450 版本: Android 9.0 kernel: msm-4.9 问题描述 虚拟导航栏原生默认是显示的,但是,作为 ...

  8. Android tv 导航页面,android6.0 TV 添加自定义导航栏

    Android TV 通常是用遥控器操作的,系统导航栏都是关闭的,但带触摸的TV就很有必要加上导航栏了. 1. 修改base/core/res/res/values/config.xml base/c ...

  9. Android开发UI之隐藏导航栏

    Android开发UI之隐藏导航栏 前言 这一篇我们将讲解: 1.在4.0及以上版本中隐藏导航栏 2.让内容显示在导航栏之后 导航栏进行隐藏,这个特性是Android 4.0版本中引入的. 即便本篇关 ...

最新文章

  1. Keras之父:我担心的是AI被社交媒体操控
  2. 顶级程序员的10条最佳实践
  3. ASP.NET中使用一般处理程序ashx作为后台处理实现响应get和post请求
  4. JVM—内存模型JMM
  5. 博客园开始对X++语言语法高亮的支持
  6. google 浏览器默认打开控制台_前端开发调试:浏览器console方法总结
  7. python循环迭代_Python中循环迭代的重做
  8. 永远不要低估自己,love your fear.
  9. Dynamics AX 2012 Manufacturing (Part 1)
  10. si4438使用stm32f103配置调试成功!
  11. pdf怎么解除限制?如何解密?一步解决
  12. Jspx.net Framework 6.38发布
  13. CNTV视频深入挖掘分析
  14. python可以开发软件_python可以开发软件吗
  15. 绘制几何图形,生成辅助线的思路
  16. 机电一体化基础知识及实训QY-JDYT01
  17. ExpandableListView自带箭头图标去除和替换
  18. 微信公众号无法获得用户列表中的昵称和用户头像URL
  19. OpenShift 4 之让Route只运行在集群中Infra节点
  20. 北大教授:只剩下学术的生活是危险的

热门文章

  1. 手机摄影修图app大合集,玩摄影的确定不了解?
  2. python 编写有道词典实时翻译
  3. vscode常用插件(vue)
  4. 【Axure视频教程】中继器表格——添加行内容
  5. 那些理工生与古诗佬李白等的对饮“诗光”
  6. matlab分块矩阵取某一块_MATLAB实现矩阵分块相乘
  7. 计算机视觉3.3 :迁移学习之图像特征向量提取与运用
  8. 201671010447杨露露 实验四软件工程结对项目
  9. k8s集群部署springcloud 单应用
  10. 如何关闭Eclipse的面包屑(breadcrumb)工具条