Android10 手势导航
种类
Android10 默认的系统导航有三种:
1.两个按钮的
2.三个按钮的
3.手势
它们分别对应三个包名
frameworks/base/packages/overlays/NavigationBarMode2ButtonOverlay
frameworks/base/packages/overlays/NavigationBarMode3ButtonOverlayframeworks/base/packages/overlays/NavigationBarModeGesturalOverlay
在设置里切换导航模式的时候会执行SystemNavigationGestureSettings.java的如下方法:
static void setCurrentSystemNavigationMode(Context context, IOverlayManager overlayManager,String key) {switch (key) {case KEY_SYSTEM_NAV_GESTURAL:int sensitivity = getBackSensitivity(context, overlayManager);setNavBarInteractionMode(overlayManager, BACK_GESTURE_INSET_OVERLAYS[sensitivity]);break;case KEY_SYSTEM_NAV_2BUTTONS:setNavBarInteractionMode(overlayManager, NAV_BAR_MODE_2BUTTON_OVERLAY);break;case KEY_SYSTEM_NAV_3BUTTONS:setNavBarInteractionMode(overlayManager, NAV_BAR_MODE_3BUTTON_OVERLAY);break;}}private static void setNavBarInteractionMode(IOverlayManager overlayManager,String overlayPackage) {try {overlayManager.setEnabledExclusiveInCategory(overlayPackage, USER_CURRENT);} catch (RemoteException e) {throw e.rethrowFromSystemServer();}}
-----------------------------------------------------------------------------------String NAV_BAR_MODE_3BUTTON_OVERLAY = "com.android.internal.systemui.navbar.threebutton";String NAV_BAR_MODE_2BUTTON_OVERLAY = "com.android.internal.systemui.navbar.twobutton";String NAV_BAR_MODE_GESTURAL_OVERLAY = "com.android.internal.systemui.navbar.gestural";-----------------------------------------------------------------------------------
根据手势加载不同的overlayPackage,也就是上面的三个包名
配置文件
这三个包都有对应的配置文件

config
这个文件配置了config_navBarInteractionMode,即该模式编号。
如下是3按钮导航的config.xml文件
<resources><!-- Controls the navigation bar interaction mode:0: 3 button mode (back, home, overview buttons)1: 2 button mode (back, home buttons + swipe up for overview)2: gestures only for back, home and overview --><integer name="config_navBarInteractionMode">0</integer>
</resources>
strings
就是配置字符串,这个没什么好说的
dimens
这里配置了导航栏的宽高之类的,如下是手势导航的dimens.xml
<resources><!-- Height of the bottom navigation / system bar. --><dimen name="navigation_bar_height">16dp</dimen><!-- Height of the bottom navigation bar in portrait; often the same as @dimen/navigation_bar_height --><dimen name="navigation_bar_height_landscape">16dp</dimen><!-- Width of the navigation bar when it is placed vertically on the screen --><dimen name="navigation_bar_width">16dp</dimen><!-- Height of the bottom navigation / system bar. --><dimen name="navigation_bar_frame_height">48dp</dimen><!-- The height of the bottom navigation gesture area. --><dimen name="navigation_bar_gesture_height">32dp</dimen>
</resources>
当你选择了手势导航时,系统就会从这里获取资源。
如果你想配置三导航的宽高也可以在三导航的 overlayPackage 下添加dimens文件。
没有在对应的overlayPackage下添加dimens文件的话,系统默认会从frameworks/base/core/res/res/values/dimens.xml中获取,如下:
<!-- Height of the bottom navigation / system bar. --><dimen name="navigation_bar_height">48dp</dimen><!-- Height of the bottom navigation bar in portrait; often the same as @dimen/navigation_bar_height --><dimen name="navigation_bar_height_landscape">48dp</dimen><!-- Width of the navigation bar when it is placed vertically on the screen --><dimen name="navigation_bar_width">48dp</dimen><!-- Height of the bottom navigation bar frame; this is different than navigation_bar_heightwhere that is the height reported to all the other windows to resize themselves around thenavigation bar window but navigation_bar_frame_height is reported to SystemUI navigationbar view's window --><dimen name="navigation_bar_frame_height">@dimen/navigation_bar_height</dimen><!-- Height of the bottom navigation bar frame in landscape --><dimen name="navigation_bar_frame_height_landscape">@dimen/navigation_bar_frame_height</dimen><!-- The height of the navigation gesture area if the gesture is starting from the bottom. --><dimen name="navigation_bar_gesture_height">@dimen/navigation_bar_frame_height</dimen>
BUG
前提:源码设置的默认导航模式其实是三按钮导航,我的代码设置的默认导航模式是手势导航
顺带一提,默认系统导航模式在frameworks/base/core/res/res/values/config.xml中设置,如下:
<!-- Controls the navigation bar interaction mode:0: 3 button mode (back, home, overview buttons)1: 2 button mode (back, home buttons + swipe up for overview)2: gestures only for back, home and overview --><integer name="config_navBarInteractionMode">0</integer>
遇到过两个bug,一开始是设置大号字体且设置系统导航为三按钮导航后重启。
这个bug一开始我是将frameworks/base/core/res/res/values/dimens.xml的navigation_bar_height改回48dp(之前改为了16dp),设置大号字体且设置系统导航为三按钮导航后重启,问题完美解决,至少我是这么以为的。
然后恢复出厂设置第一次开机,默认是手势导航,然后高为48dp(应该为16dp的),导航栏空了一大块,整个人都不好了,然后又把frameworks/base/core/res/res/values/dimens.xml的值改回了16dp,检查了frameworks/base/packages/overlays/NavigationBarModeGesturalOverlay的配置,确实16dp,也没什么问题,但就是不起效,至今原因不明。
改动了很多值测试都没成功,没办法,又将代码恢复了最初的设置,将48dp改回了16dp,然后百度一下,大神还是很多的。
终于试了很多种方法后找出了一种有用的

大神原文:
【精选】Android 12默认手势导航及bug修复_ro.boot.vendor.overlay.theme_地球边的博客-CSDN博客
大神分析的原因我没看懂,但是方法确实有效。
搜索过程中遇到另一篇没看明白的文章,虽然没试过里面的方法,但也贴在这记录一下
记录修改系统默认导航模式_Only_Studio的博客-CSDN博客
相关文章:
Android10 手势导航
种类 Android10 默认的系统导航有三种: 1.两个按钮的 2.三个按钮的 3.手势 它们分别对应三个包名 frameworks/base/packages/overlays/NavigationBarMode2ButtonOverlay frameworks/base/packages/overlays/NavigationBarMode3ButtonOverlay frameworks/base/packa…...
Pinia 插件 pinia-plugin-persist 添加 persist 属性时报错:没有与此调用匹配的重载
项目场景: Vue3TS 语言Pinia插件:pinia-plugin-persist 问题描述 代码如下: import { defineStore } from piniaexport const useInfoStore defineStore(info, {state: () > {return {activeIndex: 0}},actions: {updateIndex(active…...
Django知识
目录 一.request对象方法 1.request.method 2.request.POST 3.request.GET 4.request.FILES 5.request.path 二.FBV与CBV引入 1.FBV 2.CBV (1)路由 (2)视图 3.详解 (1)FBV (2)CBV (3)小结 三.CBV源码剖析 1.as_view方法 (1)路由对应函…...
vue2+antd——实现权限管理——js数据格式处理(回显+数据结构渲染)
vue2antd——实现权限管理——js数据格式处理 效果图如下:1.需求说明2.如何展开所有子项及孙子项目——在弹窗之前就获取树形结构,然后直接将数据传到弹窗中3.template部分代码4.script的data部分5.权限tree数据处理——将row中的权限分配到具体的value参…...
ffmpeg 4.4 cenc-aes-ctr 加解密 MP4 工程性质分析
目录 一、cenc-aes-ctr 原理介绍 二、显式 cenc-aes-ctr 和隐式 cenc-aes-ctr 三、加密工具---ffmpeg 四、播放---ffplay 五、总结 一、cenc-aes-ctr 原理介绍 加密算法:CENC-AES-CTR 使用 AES(Advanced Encryption Standard&…...
网络安全/黑客技术(0基础入门到进阶提升)
前言 前几天发布了一篇 网络安全(黑客)自学 没想到收到了许多人的私信想要学习网安黑客技术!却不知道从哪里开始学起!怎么学 今天给大家分享一下,很多人上来就说想学习黑客,但是连方向都没搞清楚就开始学习…...
栈的三道oj【C++】
栈和队列的相关oj 最小栈思路解决代码 栈的压入弹出序列思路解决代码 逆波兰表达式思路:解决代码 这里就挑了三道题用来熟悉栈 最小栈 力扣链接 咱们已经是高贵的C使用者了,不用像C语言一样从头开始造轮子了 这里我们调用了stack后,就会发…...
AI大模型低成本快速定制法宝:RAG和向量数据库
文章目录 1. 前言2. RAG和向量数据库3. 论坛日程4. 购票方式 1. 前言 当今人工智能领域,最受关注的毋庸置疑是大模型。然而,高昂的训练成本、漫长的训练时间等都成为了制约大多数企业入局大模型的关键瓶颈。 这种背景下,向量数据库凭借其独特…...
文旅媒体有哪些?如何邀请到现场报道?
传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 中国文旅产业在近年来得到了持续而快速的发展。从产业端看,中国文旅产业呈现出新的发展趋势,其中“文旅”向“文旅”转变成为显著特点。通过产业升级和空间构建&a…...
搭建知识付费系统的最佳实践是什么
在数字化时代,搭建一个高效且用户友好的知识付费系统是许多创业者和内容创作者追求的目标。本文将介绍一些搭建知识付费系统的最佳实践,同时提供一些基本的技术代码示例,以帮助你快速入门。 1. 选择合适的技术栈: 搭建知识付费…...
计算机视觉:使用opencv实现车牌识别
1 引言 汽车车牌识别(License Plate Recognition)是一个日常生活中的普遍应用,特别是在智能交通系统中,汽车牌照识别发挥了巨大的作用。汽车牌照的自动识别技术是把处理图像的方法与计算机的软件技术相连接在一起,以准…...
用封面预测书的价格【图像回归】
今天,我将介绍计算机视觉的深度学习应用,用封面简单地估算一本书的价格。 我没有看到很多关于图像回归的文章,所以我为你们写这篇文章。 距离我上一篇文章已经过去很长时间了,我不得不承认,作为一名数据科学家&#x…...
阿里云服务器e实例40G ESSD Entry系统盘、2核2G3M带宽99元
阿里云99元服务器新老用户同享2核2G经济型e实例、3M固定带宽和40G ESSD Entry系统盘,老用户也可以买,续费不涨价依旧是99元一年,阿里云百科aliyunbaike.com分享阿里云3M带宽服务器40G ESSD Entry云盘性能说明: 阿里云99元服务器配…...
Datawhale智能汽车AI挑战赛
1.赛题解析 赛题地址:https://tianchi.aliyun.com/competition/entrance/532155 任务: 输入:元宇宙仿真平台生成的前视摄像头虚拟视频数据(8-10秒左右);输出:对视频中的信息进行综合理解&…...
pyclipper和ClipperLib操作多边型
目录 1. 等距离缩放多边形 1.1 python 1.2 c 1. 等距离缩放多边形 1.1 python 环境配置pip install opencv-python opencv-contrib-python pip install pyclipper pip install numpy import cv2 import numpy as np import pyclipperdef equidistant_zoom_contour(contour…...
Golang 协程、主线程
Go协程、Go主线程 1)Go主线程(有程序员直接称为线程/也可以理解成进程):一个Go线程上,可以起多个协程,你可以这样理解,协程是轻量级的线程。 2)Go协程的特点 有独立的栈空间 共享程序堆空间 调度由用户控制 协程是轻量级的线程 go线程-…...
【SA8295P 源码分析】125 - MAX96712 解串器 start_stream、stop_stream 寄存器配置 过程详细解析
【SA8295P 源码分析】125 - MAX96712 解串器 start_stream、stop_stream 寄存器配置 过程详细解析 一、sensor_detect_device():MAX96712 检测解串器芯片是否存在,获取chip_id、device_revision二、sensor_detect_device_channels() :MAX96712 解串器 寄存器初始化 及 detec…...
pandas教程:Apply:General split-apply-combine 通常的分割-应用-合并
文章目录 10.3 Apply:General split-apply-combine(应用:通用的分割-应用-合并)1 Suppressing the Group Keys(抑制组键)2 Quantile and Bucket Analysis(分位数与桶分析)3 Example:…...
第一讲之递归与递推下篇
第一讲之递归与递推下篇 带分数费解的开关飞行员兄弟翻硬币 带分数 用暴力将所有全排列的情况都算出来 > 有三个数,a,b,c 每种排列情况,可以用两层for循环,暴力分为三个部分,每个部分一个数 当然注意这里,第一层fo…...
第十六篇-Awesome ChatGPT Prompts-备份
Awesome ChatGPT Prompts——一个致力于提供挖掘ChatGPT能力的Prompt收集网站 https://prompts.chat/ 2023-11-16内容如下 ✂️Act as a Linux Terminal Contributed by: f Reference: https://www.engraved.blog/building-a-virtual-machine-inside/ I want you to act as a…...
Mars3D与Cesium结合:3DTiles数据可视化全流程解析(含示例项目)
Mars3D与Cesium结合:3DTiles数据可视化全流程解析(含示例项目) 当我们需要在Web端实现高精度的三维地理数据可视化时,3DTiles格式已经成为行业标准。而将Mars3D与Cesium这两个强大的开源GIS引擎结合使用,可以发挥出11…...
别再死记硬背MIPI状态转换图了!用Python脚本模拟单向/双向Data Lane状态机
用Python脚本动态解析MIPI状态机:从理论到实践的可视化之旅 每次打开MIPI协议文档看到那些密密麻麻的状态转换图,是不是感觉像在解读外星密码?作为嵌入式开发者,我们需要的不是死记硬背那些LP-11→LP-01的箭头指向,而…...
JienDa聊PHP:ThinkPHP 8.0 企业级API开发与性能调优实战
1. ThinkPHP 8.0企业级API开发基础 ThinkPHP 8.0作为现代化PHP框架的代表,在企业级API开发领域展现出强大的优势。我最近刚用TP8完成了一个日活50万的电商平台API重构,实测下来性能提升非常明显。相比传统开发方式,TP8的API开发流程更加规范…...
瑞芯微RK3399固件急救指南:用upgrade_tool搞定系统崩溃后的快速还原
RK3399固件灾难恢复实战:从分区表重建到全系统还原 当一块搭载RK3399的开发板因固件损坏而变砖时,那种面对黑屏的无力感,相信每个嵌入式开发者都深有体会。去年我们产线就遭遇过因批量升级失败导致30台设备集体罢工的紧急状况,正…...
SecGPT-14B真实生成效果:漏洞成因解释、CVSS评分建议与PoC生成
SecGPT-14B真实生成效果:漏洞成因解释、CVSS评分建议与PoC生成 1. SecGPT-14B网络安全大模型简介 SecGPT是由云起无垠团队开发的开源大语言模型,专门针对网络安全领域优化。这个14B参数规模的模型采用vLLM框架部署,并通过Chainlit提供用户友…...
nanobot应用场景:用Qwen3-4B构建Linux运维助手,自动解析nvidia-smi输出
nanobot应用场景:用Qwen3-4B构建Linux运维助手,自动解析nvidia-smi输出 1. 项目介绍:超轻量级AI运维助手 nanobot是一款受OpenClaw启发的超轻量级个人人工智能助手,专门为Linux运维场景设计。这个工具最大的特点是轻量高效&…...
Bluesky AI助手Attie:用户不满下的未来挑战
Attie:定制化社交媒体动态新尝试Bluesky正在开发的新型AI助手Attie,以AT协议命名,可创建定制化的社交媒体动态。它作为一个独立的可选应用程序,目前处于仅限受邀用户参与的封闭测试阶段。其目标是打造一个比单纯搜索话题更全面的时…...
从‘发快递’到‘收快递’:手把手拆解RocketMQ 5.x中Producer Group的变迁与最佳实践
从‘发快递’到‘收快递’:手把手拆解RocketMQ 5.x中Producer Group的变迁与最佳实践 在消息中间件的世界里,RocketMQ一直以其高吞吐、低延迟的特性占据着重要地位。随着5.x版本的发布,一个看似微小的改动——生产者匿名化,却在实…...
Flutter文件操作实战:File_selector跨平台文件处理从入门到精通
1. 为什么Flutter开发者都需要掌握File_selector? 在移动应用和桌面应用开发中,文件操作就像我们日常生活中的"文件柜"——你需要存放、查找、整理各种文档。而Flutter作为跨平台框架,最大的挑战就是如何在不同操作系统上实现统一的…...
如何将笔记从 iCloud 传输到 iPhone:分步指南
iPhone 上的“备忘录”应用是一款便捷的工具,可以用来记录待办事项、日记、想法等等。它能帮助我们追踪需要完成的事情。借助 iCloud 的自动同步功能,你的备忘录可以安全地存储在云端,并可通过任何 Apple 设备甚至电脑访问。将笔记从 iPhone …...
