Android导航栏功能项的显示与屏蔽介绍
作者:Android 发布时间:2022-09-27 06:38:55
标签:Android,导航栏
Android 的导航栏有诸多功能,例入 截屏,音量加,音量减,最近任务,菜单.返回,主页面,输入法开关......
代码源路径:frameworks\base\packages\SystemUI\src\com\android\systemui\statusbar\phone\NavigationBarView.java
public ButtonDispatcher getScreenshotButton() {
return mButtonDispatchers.get(R.id.screenshot);
}
public ButtonDispatcher getVolumeAddButton() {
return mButtonDispatchers.get(R.id.volume_add);
}
public ButtonDispatcher getVolumeSubButton() {
return mButtonDispatchers.get(R.id.volume_sub);
}
public ButtonDispatcher getRecentsButton() {
return mButtonDispatchers.get(R.id.recent_apps);
}
public ButtonDispatcher getMenuButton() {
return mButtonDispatchers.get(R.id.menu);
}
public ButtonDispatcher getBackButton() {
return mButtonDispatchers.get(R.id.back);
}
public ButtonDispatcher getHomeButton() {
return mButtonDispatchers.get(R.id.home);
}
public ButtonDispatcher getImeSwitchButton() {
return mButtonDispatchers.get(R.id.ime_switcher);
}
public ButtonDispatcher getAccessibilityButton() {
return mButtonDispatchers.get(R.id.accessibility_button);
}
Android 即在此类中完成对 Button图标 的选择 .
若需要展示/隐藏对应的 功能选项时,需要在此处修改:
private void prepareNavigationBarView() {
mNavigationBarView.reorient();
ButtonDispatcher recentsButton = mNavigationBarView.getRecentsButton();
recentsButton.setOnClickListener(this::onRecentsClick);
recentsButton.setOnTouchListener(this::onRecentsTouch);
recentsButton.setLongClickable(true);
recentsButton.setOnLongClickListener(this::onLongPressBackRecents);
ButtonDispatcher backButton = mNavigationBarView.getBackButton();
backButton.setLongClickable(true);
backButton.setOnLongClickListener(this::onLongPressBackRecents);
ButtonDispatcher homeButton = mNavigationBarView.getHomeButton();
homeButton.setOnTouchListener(this::onHomeTouch);
homeButton.setOnLongClickListener(this::onHomeLongClick);
ButtonDispatcher accessibilityButton = mNavigationBarView.getAccessibilityButton();
accessibilityButton.setOnClickListener(this::onAccessibilityClick);
accessibilityButton.setOnLongClickListener(this::onAccessibilityLongClick);
updateAccessibilityServicesState(mAccessibilityManager);
ButtonDispatcher screenshotButton = mNavigationBarView.getScreenshotButton();
screenshotButton.setOnClickListener(this:: screenshotClick);
screenshotButton.setOnTouchListener(this:: screenshotTouch);
boolean isShow=Settings.System.getInt(getContext().getContentResolver(), Settings.System.SCREENSHOT_BUTTON_SHOW, 1) == 1;
if(isShow){
screenshotButton.setVisibility(View.VISIBLE);
}else{
screenshotButton.setVisibility(View.GONE);
}
ButtonDispatcher volumeAddButton=mNavigationBarView.getVolumeAddButton();
ButtonDispatcher volumeSubButton=mNavigationBarView.getVolumeSubButton();
boolean isShowVolumeButton="true".equals(SystemProperties.get("ro.rk.systembar.voiceicon","true"));
if(isShowVolumeButton){
volumeAddButton.setVisibility(View.VISIBLE);
volumeSubButton.setVisibility(View.VISIBLE);
}else{
volumeAddButton.setVisibility(View.GONE);
volumeSubButton.setVisibility(View.GONE);
}
if (getContext().getResources().getConfiguration().smallestScreenWidthDp < 400) {
volumeAddButton.setVisibility(View.GONE);
volumeSubButton.setVisibility(View.GONE);
}
}
可以将对应的Button 设置 setVisibility(View.GONE / View.INVISIBLE / View.VISIBLE);
当加上setVisibility时,UI界面还没显示时,需要注意config.xml中是否有写进去需要的Button .
frameworks\base\packages\SystemUI\res\values\config.xml
<string name="config_navBarLayout" translatable="false">left;volume_sub,back,home,recent,volume_add;right</string>
需要注意的是,config中配置的顺序 即为 UI的显示顺序 .
提一嘴,如果需要用到屏蔽状态栏以及任务栏,可以将如下status_bar_height的高度设为0.
frameworks\base\core\res\res\values\dimens.xml
<!-- Height of the status bar -->
<dimen name="status_bar_height">0dp</dimen>
来源:https://blog.csdn.net/qq_44844314/article/details/122059496


猜你喜欢
- 本文研究的主要是Java数组的扩容的相关代码示例,具体实现过程如下所示。在写程序的过程中,我们常常会碰见数组空间不够用的情况,比如我已经初始
- 从个小例子开始: int[] intArray = new int[]{2,3,6,1,4,5}; Array.Sort(intArray)
- 1.灰度线性变换图像的灰度线性变换是图像灰度变换的一种,图像的灰度变换通过建立灰度映射来调整源图像的灰度,从而达到图像增强的目的。灰度映射通
- 前言在 C# 项目中通过链接方式引入文件可以让我们在项目中使用这些文件中的代码。常见的比如链接 AssemblyInfo.cs 文件,这样我
- 有个小伙伴遇到了这样一个问题,就是AutoCompleteTextView实现自动填充的功能。同时要具备手机格式化的功能。下拉列表最后一行是
- 需要用到 java 写一个 ftp 的工具,因为只有一点点 java 基础,但是由于好几年不用,几乎算是不会了,只好一点点来搞,还好能捡起来
- 本文实例为大家分享了java模拟斗地主发牌的具体代码,供大家参考,具体内容如下1.案例介绍规则:组装54张扑克牌54张牌顺序打乱三个玩家参与
- 目录项目地址示例图片项目结构机器人平滑碰撞其它特性使用打包文件项目文件声明主要代码项目地址https://github.com/SCNU-A
- Jenkins集成Sonar过程中遇到的报错1、jenkins中无法添加sonarqube的token凭证因为添加的凭证类型错误,所以无法添
- 今天学习到了SpringBoot 的属性赋值@Value用法先总结@Value(" 张三 "):直接附在属性名上,在Be
- 先从本地把图片上传到服务器,然后根据URL把头像处理成圆形头像。因为上传图片用到bmob的平台,所以要到bmob(http://www.bm
- 一.以springboot为例,建立代码1.IExecCommandServer:public interface IExecCommand
- Android中图片的左右切换随处可见,今天我也试着查阅资料试着做了一下,挺简单的一个小Demo,却也发现了一些问题,话不多说,上代码~:使
- 前言在第一篇文字中,我们完全人工方式,一个命令一个命令输入,实现一个java tomcat运行环境,虽然也初见成效,但很累人。如果依靠依靠脚
- 简介ThreadPoolExecutor是一个实现ExecutorService接口的线程池,ExecutorService是主要用来处理多
- 修改Android FloatingActionButton的title的文字颜色及背景颜色实例详解首先看一张图片 我是在一个不错的开源的F
- 前言相信大家对Android悬浮窗应该是很熟悉了,比如说腾讯视频、爱奇艺等APP都有悬浮窗功能。在你打游戏的同时还可以看视频,充分利用屏幕空
- 本文实例为大家分享了SpringBoot+easypoi实现数据的Excel导出的具体代码,供大家参考,具体内容如下maven<dep
- SpringBoot配置文件的替换使用spring.profiles.active在工作中,测试或上线的时候一定会遇到的问题就是修改配置。一
- 这篇文章讨论了Java面向对象概念中一个基本的概念–Field Hiding(隐藏成员变量)在讨论这个问题之前,我们看一段特别特别简单的代码