Android 9.0 显示系统导航栏(左/右/底部)_android9 系统导航栏-程序员宅基地

技术标签: Android导航栏  Android笔记  Android  

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_33544860/article/details/109466680

智能推荐

Unity动画️11. IK动画—手与木头的匹配_unity onanimatorik-程序员宅基地

文章浏览阅读1.5k次,点赞3次,收藏7次。IK动画—手与木头的匹配_unity onanimatorik

C++11标准模板(STL)- 算法 - 数值运算 (std::accumulate)-程序员宅基地

文章浏览阅读3.4k次。对一个范围内的元素求和。计算给定值 init 与给定范围 [first, last) 中元素的和。第一版本用 operator+ ,第二版本用二元函数 op 求和元素,均将 std::move 应用到其左侧运算数 (C++20 起)。_std::accumulate

SPark学习笔记:13 Spark Streaming 的Transform算子和Action算子_sparkstream action算子-程序员宅基地

文章浏览阅读1.1k次。和RDD类似,DStreams也有一些转换算子用于处输入流中的数据。DStream中有很多转换算子和RDD的转换算子一样,同时也提供了一些额外的算子。此文将总结DStreams的各种算子的使用。_sparkstream action算子

【每日一linux命令7】用户及用户组-程序员宅基地

文章浏览阅读40次。一、查询用户及用户组相关命令1、whoami查询当前登录的用户名2、groups查询当前登录用户名所在的用户组3、groups root查询root用户名所在的用户组二、怎么批量查看用户组1、/etc/group文件包含所有组所以执行命令:cat /etc/group ,就可以查询到所有用户组了2、/etc/group解说/etc/group 文件是用户..._请用一句命令列出服务器上的所有用户组。

软件测试集合点策略,LoadRunner 技巧之集合点设置-程序员宅基地

文章浏览阅读203次。Action(){web_url("wapmail.10086.cn","URL=http://wapmail.10086.cn/","Resource=0","RecContentType=text/html","Referer=","Snapshot=t19.inf","Mode=HTML",EXTRARES,"Url=http://wapmail.10086.cn:8000/img/p/lo..._mo集合点

Android代码混淆及反编译apk_android 如何查看混淆后的代码-程序员宅基地

文章浏览阅读1k次,点赞3次,收藏4次。序言:经常听开发提起代码混淆引起的BUG,混淆后在测试一下有没有问题,那问题来了什么是代码混淆,怎么确认代码混淆成功了,带着问题读下文吧~~一、代码混淆的原理代码混淆是将程序中的代码,等价转换为难以阅读理解的行为,提高攻击者阅读理解代码的难度,提高安全性,可以有效的提高应用被逆向破解的难度二、代码混淆的方法1.字符串加密:对应用程序中使用的字符串进行加密,防止获取关键词定位核心业务代码2.类名、方法名混淆:讲代码中类名,方法名,属性名替换成无意义的符号,增加代码逆向难度,这种方式也是在jav_android 如何查看混淆后的代码

随便推点

python变白_Python OpenCV纯白色背景-程序员宅基地

文章浏览阅读2.5k次。我有一个DIY家庭摄影棚来拍照。我希望他们在纯白色的背景(#FFFFFF)和最少的用户交互这是我的原始图片(没有任何处理,只是相机的原始图片)我用opencv和Tkinter for UI实现了简单的python程序1)使用对象(ROI)获取rect我决定用UI来选择ROI,也许以后我会编写代码来自动识别照片上的对象。在2)使用cv2.grabCut函数,我尝试从这个矩形中剪切背景cv2.grab..._python opencv画白色背景

VScode 历史版本_下载历史版本vscode-程序员宅基地

文章浏览阅读2w次,点赞8次,收藏19次。VScode 官方历史版本下载地址https://code.visualstudio.com/updatesVScode 在github上的release列表https://github.com/Microsoft/vscode/releases其实vscode的下载地址中的一串超级长的哈希码就是commit id。其下载地址就是就这样拼接来的。以下是我使用 js 拼接来的部分版本下载..._下载历史版本vscode

数据结构-程序员宅基地

文章浏览阅读41次。数据结构:如:typedefstruct_WNDCLASS{UINTstyle;WNDPROClpfnWndProc;intcbClsExtra;}WNDCLASS,*PWNDCLASS;这个数据结构用汇编来表示:WNDCLASSstructstyle..._wndclass未初始化

Open3D与numpy互转_python numpy open3d 转换-程序员宅基地

文章浏览阅读1.1w次,点赞12次,收藏40次。作为点云可视化利器,居然百度了一圈没有谁写关于open3D与numpy互转的介绍,看来这个毕竟还是小众。翻了一遍官方介绍,还算简单,这里介绍一下如何转换。NumPy to open3d.PointCloudnumpy转open3D需要借助Vector3dVector函数,这样可以直接赋值与open3d.PointCloud.points,具体操作如下,假设xyz是一个n*3numpy数组:import numpy as npimport open3D as o3d\pcd = o3d.geom_python numpy open3d 转换

SpringBoot集成Zookeeper_springboot与zookeeper集成demo-程序员宅基地

文章浏览阅读5w次,点赞12次,收藏109次。Zookeeper 伪集群安装部署操作Java操作Zookeeper实现分布式锁和队列文章目录分布式事物CAP理论CAP定理的应用BASE理论2PC提交3PC提交zookeeper集群的角色ZAB协议的核心思想ZAB协议两种模式ZAB协议消息广播流程图ZAB协议奔溃恢复SpringBoot集成Zookeeper实战分布式事物分布式事务是指事务的参与者,支持事务的服务器,资源服务器分别位于..._springboot与zookeeper集成demo

线程同步&线程池_线程池同步-程序员宅基地

文章浏览阅读760次。线程同步:即当有一个线程在对内存进行操作时,其他线程都不可以对这个内存地址进行操作,直到该线程完成操作, 其他线程才能对该内存地址进行操作,而其他线程又处于等待状态,实现线程同步的方法有很多,临界区对象就是其中一种。在一般情况下,创建一个线程是不能提高程序的执行效率的,所以要创建多个线程。但是多个线程同时运行的时候可能调用线程函数,在多个线程同时对同一个内存地址进行写入,由于CPU时间调度上的问..._线程池同步

推荐文章

热门文章

相关标签