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. 为什么曾经厉害的人突然不厉害了?
  2. ubuntu java 编译器_Ubuntu 16.04配置Java开发环境
  3. python 多个配置文件_django中如何如何针对不同的环境使用多个配置文件?
  4. 第一个Qt+opencv程序
  5. eclipse的workset项目重复显示解决方案
  6. greenplum 查询出来的数字加减日期_Python实践代码总结第5集(日期相关处理)
  7. distinct过滤掉重复记录并且显示所有字段_MySQL的所有姿势,我都帮你准备好了...
  8. 名图1.8智能隐藏功能_7年后再度回归 全新一代名图“大”不同_搜狐汽车
  9. 归并算法(分割与合并)
  10. mysql dump h_mysqldump
  11. 如何打开电脑就自动显示html文件,电脑教程:Win10怎么打开html文件
  12. 计算机输入输出接口是交接界面,计算机组成原理试题1
  13. 一阶倒立摆的起摆与稳摆simulink仿真
  14. usb转rs485测试软件,usb转rs485
  15. Cookie和Session
  16. unity设置手机横屏方法和相关问题
  17. 亚马逊查询订单listorders方法
  18. CUDA 编程 __launch_bounds__的应用方法
  19. ExtJS界面设计工具 Ext Designer
  20. 利用pygame实现大鱼吃小鱼游戏

热门文章

  1. java schema校验_Json Schema 校验json,java代码示例
  2. 知识图谱表示 | TransE原理简介与代码解读
  3. ES6系列教程第四篇--asyn详解
  4. SOLIDWORKS官方认证考试
  5. windows下如何搭建属于自己的git服务器?
  6. MacBook触控板使用技巧 Mac的触发角是什么?Mac触发角功能怎么设置?
  7. 记一次TL-R479-GPE-AC V4.0 SSH破解
  8. Python+大数据-知行教育(七)-学生出勤主题看板
  9. 留一法(交叉验证法,Leave-One-Out Cross Validation)
  10. 【电气专业知识问答】问:发电机失磁异步运行故障如何处理?