android 下拉状态栏(SystemUI)常见修改记录

2023-11-09

  • 摘要:下拉状态栏:1.下拉状态栏的亮度条:frameworks/base/packages/SystemUI/src/com/android/systemui/qs/QSPanel.javamBrightnessView对应布局文件:quick_settings_brightness_dialog.xml2.滑动亮度条后过渡到桌面的亮度条frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phon
  • 下拉状态栏:

    1.下拉状态栏的亮度条:

    frameworks/base/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java

    mBrightnessView

    对应布局文件:quick_settings_brightness_dialog.xml

    2.滑动亮度条后过渡到桌面的亮度条

     

    frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java

    protected void inflateStatusBarWindow(Context context) { 
            mStatusBarWindow = (StatusBarWindowView) View.inflate(context, 
                    R.layout.super_status_bar, null); 
        }

    mStatusBarWindow

    对应布局文件:super_status_bar.xml

    布局文件中对应项:<includelayout="@layout/brightness_mirror" />

    3.亮度条中的滑动条样式修改

     

    frameworks/base/packages/SystemUI/src/com/android/systemui/settings/ToggleSlider.java

    布局文件:status_bar_toggle_slider.xml

    4.下拉状态栏的图标块

    有两处

    /frameworks/base/packages/SystemUI/src/com/android/systemui/qs/tiles/***Tile.java

    对应的Vector矢量图文件命名为ic_qs_xxx.xml

    AirplaneModeTile:飞行模式,默认有动画的。用图片替换要把动画在代码中注释掉。

    BatteryTile:电池。用BatteryMeterDrawable自定义view画出来的。

    BluetoothTile:蓝牙

    CastTile:投射

    CellularTile:移动数据网络,无sim卡

    ColorInversionTile:反色

    DataSaverTile:流量节省程序

    DataUsageDetailView:默认没显示,数据使用细节

    DndTile:勿扰donot disturb

    FlashlightTile:手电筒

    HotspotTile:热点

    IntentTile:默认没显示,不知道长啥样

    LocationTile:位置信息

    RotationLockTile:自动旋转,纵向

    ScreenShotTile:截图

    UserDetailItemView:默认没显示,不知道长啥样

    UserDetailView:默认没显示,不知道长啥样

    UserTile:默认没显示,不知道长啥样

    WifiTile:Wlan

    WorkModeTile:默认没显示,不知道长啥样

    还有MTK的

    /frameworks/base/packages/SystemUI/src/com/mediatek/systemui/qs/tiles/***Tile.java

    HotKnotTile

    ApnSettingsTile

    DualSimSettingsTile

    MobileDataTile

    QsIconWrapper

    SimDataConnectionTile

    5.增删下拉状态栏的图标块

    frameworks/base/packages/SystemUI/res/values/config.xml中修改

    <!--The default tiles to display in QuickSettings -->
    <!--M: add hotknot tile -->
    <stringname="quick_settings_tiles_default" translatable="false">
    wifi,cell,battery,dnd,flashlight,rotation,bt,airplane,location,hotknot,screenshot
    </string>

    6.WLAN图标块点击后信号强度

     

    frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/policy/AccessPointControllerImpl.java

        private static final int[] ICONS = { 
            R.drawable.ic_qs_wifi_full_0, 
            R.drawable.ic_qs_wifi_full_1, 
            R.drawable.ic_qs_wifi_full_2, 
            R.drawable.ic_qs_wifi_full_3, 
            R.drawable.ic_qs_wifi_full_4, 
        };

    7.修改手机信号强度图

    frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/policy/TelephonyIcons.java

        static final int[][] QS_TELEPHONY_SIGNAL_STRENGTH = { 
            { R.drawable.ic_qs_signal_0, 
              R.drawable.ic_qs_signal_1, 
              R.drawable.ic_qs_signal_2, 
              R.drawable.ic_qs_signal_3, 
              R.drawable.ic_qs_signal_4 }, 
            { R.drawable.ic_qs_signal_full_0, 
              R.drawable.ic_qs_signal_full_1, 
              R.drawable.ic_qs_signal_full_2, 
              R.drawable.ic_qs_signal_full_3, 
              R.drawable.ic_qs_signal_full_4 } 
        };
     

    8.单条通知栏ui修改

     

    修改两个位置:

    位置1:

    frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/ActivatableNotificationView.java

    protectedvoid onFinishInflate() {}中

    修改下面两句

    mBackgroundNormal.setCustomBackground

    mBackgroundDimmed.setCustomBackground

    同时让下面两个方法为空

    privatevoid updateOutlineAlpha() {}

    publicvoid setFakeShadowIntensity(float shadowIntensity, floatoutlineAlpha, int shadowYEnd,

    intoutlineTranslation) {}

    位置2:

    frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java

    这个是个ViewGroup,它在onDraw里面还画了次背景。需要干掉这个背景。

    让下面这个方法为空。

    privatevoid updateBackground() {}

    protectedvoid onDraw(Canvas canvas) {}中注销掉下面这句

    canvas.drawRect(0,mCurrentBounds.top, getWidth(), mCurrentBounds.bottom,mBackgroundPaint);

    修改后效果:

     

    9.多条通知栏的背景修改

     

    frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView

    默认背景就是当前界面截图加了个黑色透明度。

    这个要谨改,因为会影响到按下power键唤醒屏幕时候的锁屏。如果把背景设成黑色,可能power键唤醒屏幕后,多条通知栏的背景是黑的。

    10.删除修改显示布局边界,GPU呈现模式分析,Nearby

     

    GPU呈现模式分析,显示布局边界都是packages/apps/Settings中的

    在AndroidManifest.xml中可以找到

    	<service 
                    android:name=".qstile.DevelopmentTiles$ShowLayout" 
                    android:label="@string/debug_layout" 
                    android:icon="@drawable/tile_icon_show_layout" 
                    android:permission="android.permission.BIND_QUICK_SETTINGS_TILE" 
                    android:enabled="false"> 
                <intent-filter> 
                    <action android:name="android.service.quicksettings.action.QS_TILE" /> 
                </intent-filter> 
            </service> 
            <service 
                    android:name=".qstile.DevelopmentTiles$GPUProfiling" 
                    android:label="@string/track_frame_time" 
                    android:icon="@drawable/tile_icon_graphics" 
                    android:permission="android.permission.BIND_QUICK_SETTINGS_TILE" 
                    android:enabled="false"> 
                <intent-filter> 
                    <action android:name="android.service.quicksettings.action.QS_TILE" /> 
                </intent-filter> 
            </service>

    label对应的string在framework/base/packages/SettingsLib中

    icon对应的drawable在packages/apps/Settings中

    packages/apps/Settings/src/com/android/settings/qstile/DevelopmentTiles.java

    Nearby是谷歌的玩意,修改的话也能修改,就是加判定在TileQueryHelper.java中修改,当然上面的

    GPU呈现模式分析,显示布局边界也可以这么修改。只不过不建议用这种方式修改。

    删除这三个东西:

    frameworks/base/packages/SystemUI/src/com/android/systemui/qs/customize/TileQueryHelper.java

        private class QueryTilesTask extends 
                AsyncTask<Collection<QSTile<?>>, Void, Collection<TileInfo>> {}
    		doInBackground{}中
                List<ResolveInfo> services = pm.queryIntentServicesAsUser( 
                        new Intent(TileService.ACTION_QS_TILE), 0, ActivityManager.getCurrentUser());
    这句修改为
    			//lqp 
                	//List<ResolveInfo> services = pm.queryIntentServicesAsUser( 
                   //     new Intent(TileService.ACTION_QS_TILE), 0, ActivityManager.getCurrentUser()); 
    		List<ResolveInfo> services = new ArrayList<ResolveInfo>(); 

    11.为原生android下拉状态栏新增自动调节亮度开关

     

    alps/device/mediatek/mt6735/bird.mk

    alps/frameworks/base/packages/SystemUI/bird/res/layout/ui_icon_qs_brightness_dialog.xml

    alps/frameworks/base/packages/SystemUI/bird/res/values-zh-rCN/strings.xml

    alps/frameworks/base/packages/SystemUI/bird/res/values/strings.xml

    alps/frameworks/base/packages/SystemUI/bird/src/com/bird/systemui/BirdFeatureOption.java

    alps/frameworks/base/packages/SystemUI/res/layout/quick_settings_brightness_dialog.xml

    alps/frameworks/base/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java

    .../base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java

    alps/packages/apps/Settings/src/com/android/settings/DisplaySettings.java

    三个地方需要同步,设置中的显示DisplaySettings.下拉状态栏的图标处QSPanel,点击滑条后的PhoneStatusBar。

    如何同步? 使用观察者模式。

    在Switch进行操作后需要变更Settings.System.SCREEN_BRIGHTNESS_MODE值。在值变化后Switch控件状态需要同步变化。

    QSPanel.java中代码:

    //liuqipeng add 20170619 BUG #26165 
    import android.widget.CompoundButton; 
    import android.widget.ToggleButton; 
    import android.widget.Switch; 
    import android.provider.Settings; 
    import android.widget.CompoundButton.OnCheckedChangeListener; 
    import android.database.ContentObserver; 
    import static android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE; 
    import static android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC; 
    import static android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL; 
    //liuqipeng end 20170619
    public QSPanel(Context context, AttributeSet attrs) {
    		//liuqipeng add 20170619 BUG #26165 
    		if(BirdFeatureOption.BIRD_SHOW_AUTO_BRIGHT_SWITCH){ 
    			View mAutoBrightRl=findViewById(R.id.auto_bright_rl); 
    			mAutoBrightRl.setVisibility(View.VISIBLE); 
    			Switch mAutoBright=(Switch)findViewById(R.id.auto_bright_switch); 
    		    int brightnessMode = Settings.System.getInt(context.getContentResolver(), 
    		            SCREEN_BRIGHTNESS_MODE, SCREEN_BRIGHTNESS_MODE_MANUAL); 
    			mAutoBright.setChecked(brightnessMode != SCREEN_BRIGHTNESS_MODE_MANUAL); 
    			mAutoBright.setOnCheckedChangeListener(new OnCheckedChangeListener() { 
    			 
    				@Override 
    				public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
    				    Settings.System.putInt(context.getContentResolver(), SCREEN_BRIGHTNESS_MODE, 
    				            isChecked ? SCREEN_BRIGHTNESS_MODE_AUTOMATIC : SCREEN_BRIGHTNESS_MODE_MANUAL); 
    				} 
    			}); 
    			ContentObserver BrightnessMode = new ContentObserver(new Handler()) { 
    				@Override 
    				public void onChange(boolean selfChange) { 
    					super.onChange(selfChange); 
    					int brightnessMode = Settings.System.getInt(context.getContentResolver(), 
    							SCREEN_BRIGHTNESS_MODE, SCREEN_BRIGHTNESS_MODE_MANUAL); 
    					mAutoBright.setChecked(brightnessMode != SCREEN_BRIGHTNESS_MODE_MANUAL); 
    				} 
    			}; 
    			context.getContentResolver().registerContentObserver(Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS_MODE),true, BrightnessMode); 
    		} 
    }
    		//liuqipeng end 20170619
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

android 下拉状态栏(SystemUI)常见修改记录 的相关文章

  • [Docker]Elasticsearch启动报错:Format version is not supported

    如果之前安装过Elasticsearch 安装新的Elasticsearch之前需要清空宿主机器对应的挂载目录下的文件数据
  • 打百万拳,走万里路。

    自我介绍 CSDN的大家你们好啊 我是一名大一的学生 与CSDN的相识还要从大一一次次查找知识点开始 当时由于刚接触编程 做什么都一头雾水而又不想去问老师那些简单的知识 于是自己在网上查找 就发现了CSDN这个大学生聚集地 由于很多都是和我
  • Python单重循环练习题

    第一次学python 求大佬指正 1 有1020个西瓜 第一天卖掉总数的一半后又多卖出两个 以后每天卖剩下的一半多两个 问几天以后能卖完 8天后能卖完 sum 1020 day 0 while sum gt 0 day 1 sum sum
  • 解决tomcat 启动超过45秒时间限制

    当在eclipse运行一个javaweb项目时 出现了如下图片中的问题 解决方法 1在如下页面中找到Servers 找不到的话可以通过Window gt gt Show View放到下方 2 双击Servers进到如下页面 3 打开箭头所指
  • C++: read SQL server data using System::Data::SqlClient;

    stdafx h stdafx h include file for standard system include files or project specific include files that are used frequen
  • 『学Vue2+Vue3』自定义指令、插槽、路由入门

    day05 一 学习目标 1 自定义指令 基本语法 全局 局部注册 指令的值 v loading的指令封装 2 插槽 默认插槽 具名插槽 作用域插槽 3 综合案例 商品列表 MyTag组件封装 MyTable组件封装 4 路由入门 单页应用
  • 20个最炫HTML5,jQuery和CSS3下拉菜单制作教程(附示例/源码)

    3 Level Navigation Menu 三级导航菜单 独具特色的导航菜单 包含CSS3渐变 多个子菜单和jQuery动画 CSS3 Minimalistic Navigation Menu 一个简单的CSS3动画导航菜单 SLIDE
  • python之logging模块详解

    python之 logging 模块 文章目录 python之 logging 模块 一 日志关概念 日志的作用 日志的等级 3 日志字段信息与日志格式 4 日志功能的实现 二 logging 模块介绍 什么是logging模块 loggi
  • Linux服务器启动tomcat的三种方式

    直接进入主题 首先cd进入tomcat的bin文件夹下 然后可以尝试以下三种启动方式 第一种 当前会话启动 startup sh 效果 然后tomcat就在后台启动了 我们还可以在当前会话中继续输入其它指令 比如 ps ef grep to
  • Source Insight 自动补全 C 关键字、keil 标准库关键字

    一开始遇到该问题疯狂 baidu bing 相关的 blog 寥寥无几 而且是差不多十年前的 blog 主要原因 Source Insight 默认不包含 C 库文件 keil 标准库 导致编辑代码时找不到 C 库的相关宏 变量类型 函数等
  • [1082]IDEA配置tomcat时出现的问题及解决(HTTP状态404-未找到)

    文章目录 问题1 没有新建环境变量 问题2 tomcat设置depolyment有误 问题1 没有新建环境变量 解决 在系统环境变量中添加变量CATALINA BASE和CATALINA BASE 两个变量的值都是tomcat的安装路径 如
  • 【Java SE】基本数据类型

    大家好 我是保护小周 本期为大家带来的是 Java的基本数据类型 内容会与C语言的基本数据类型进行基本的比较 数据类型提示 整型提升 以及简单了解 String 类型 进一步感受Java 的安全性 C语言混不下去了 面向对象的编程太爽了 目
  • Hyperledger Fabric 安装环境配置答疑(1)

    目录 1 Hyperledger Fabric只支持Ubuntu系统吗 2 cURL是什么 有什么作用 3 为什么要安装Docker及docker compose 4 能否不使用Golang而换作其他语言环境 5 一定要安装Node与npm
  • 多态的概念

    一 多态的概念 多态 Polymorphism 按字面的意思就是 多种状态 是面向对象的序设计语言最核心的特征 具体点就是去完成某个行为 当不同的对象去完成时会产生出不同的状态 多态建立在继承和封装的基础上 二 多态的分类 编译时多态 设计
  • 静态成员变量的初始化,以及可能引发的multiple define问题

    静态成员变量的初始化 以及可能引发的multiple define问题 先说个人问题的解决方式 不要再头文件中定义静态成员变量 示例 test h ifndef TEST H define TEST H class hh static in
  • 网络协议的三个要素是什么?各有什么含义?

    网络协议的三个要素是什么 各有什么含义 网络协议 为进行网络中的数据交换而建立的规则 标准或约定 由以下三个要素组成 1 语法 即数据与控制信息的结构或格式 2 语义 即需要发出何种控制信息 完成何种动作以及做出何种响应 3 规则 即事件实
  • 删除tomcat日志

    1 df 查看磁盘空间 2 对应用户进去删掉对应日志 3 重启tomcat 重新生成文件 或者 4 lsof grep deleted发现有大量刚刚删除文件的进程存在 kill掉进程 5 使用df 查看磁盘空间 发现已经回收 最好重启下to
  • 二叉搜索树的中序遍历为 递增序列_Go 刷 Leetcode 系列:恢复二叉搜索树

    二叉搜索树中的两个节点被错误地交换 请在不改变其结构的情况下 恢复这棵树 示例 1 输入 1 3 null null 2 1 3 2输出 3 1 null null 2 3 1 2 示例 2 输入 3 1 4 null null 2 3 1
  • 一维连续型随机变量的函数分布

    目录 a b N 2 a b N 0 1 2 N 2 e sin a b N 2 a b N 0 1 2 N 2 e sin
  • LoadRunner脚本测试——登录实践

    实习公司最近在做一款会计项目的财政管理系统 跟着测试组在做登录响应测试时 学到了不少实践经验 本文作以简单阐述和分享 通过代理服务器录制脚本 测试系统的门户必须用Chrome打开 然而测试环境lr11似乎只对IE浏览器兼容 事实上 lr与浏

随机推荐

  • Java入门(2) —— 变量详解、运算符、定义类和定义方法以及方法的调用

    1 变量 1 定义变量 1 声明的同时直接赋值 数据类型 变量名 值 2 先声明 后赋值 声明 数据类型 变量名 赋值 变量名 值 2 数据类型 基本数据类型 4类8种 整数 gt 直接写整数 默认就是 int byte 1个字节 shor
  • 喷水装置(一)贪心算法

    听说这是 贪心算法 的一个简单应用 虽说是简单 但是对我来说 确实不简单 说下面说有用的 题目描述 现有一块草坪 长为20米 宽为2米 要在横中心线上放置半径为Ri的喷水装置 每个喷水装置的效果都会让以它为中心的半径为实数Ri 0
  • Fire-YOLO:一种用于火灾检测的小目标检测方法

    点击上方 小白学视觉 选择加 星标 或 置顶 重磅干货 第一时间送达 作者丨CY 来源丨当交通遇上机器学习 编辑丨极市平台 极市导读 本次介绍的文章是太原理工大学团队在2022年发表在 Sustainability 的关于火灾检测的小目标实
  • qiankun 常见问题集合(一)

    qiankun 常见问题集合 一 1 loader js 220 Uncaught in promise Error qiankun You need to export lifecycle functions in app4 entry
  • 在使用localstorage的时候发生了报错的解决办法

    在使用localstorage的时候 发生了报错 提示是传入的格式不正确 但是传入的是json格式 为什么不正确呢 1 在localStorage setItem 过程中 传进的参数需使用JSON tringfy 方法转成json格式的字符
  • 用链式线性表实现两个一元多项式相加

    include
  • springboot+vue跨域(草稿箱中翻出来的)

    第一种 新建 GlobalCorsConfig 类 import org springframework context annotation Bean import org springframework context annotati
  • Copilot是GPT的理想应用模式吗?

    自OpenAI发布ChatGPT以来 LLM持续火热 各大公司纷纷入场 但近一段时间以来 我观测到的LLM应用场景 基本都是Copilot的形式 即以对话为基础的辅助应用 尽管体验起来十分的高大上 但我能明确感受到 这种Copilot的形式
  • pyspark中文api

    内容基于官网pyspark SparkSQL官方文档翻译及拓展 官方文档 https spark apache org docs latest api python reference pyspark sql index html 具体使用
  • Eclipse上的HTML/JSP/XML编辑器插件Eclipse HTML Editor

    官网 http amateras sourceforge jp cgi bin fswiki en wiki cgi page EclipseHTMLEditor Eclipse HTML Editor is an Eclipse plug
  • js的三种弹窗

    1 alert 提示框 用途 一般用于提示信息或者警告信息的展示 2 confirm option 确认 或 取消 消息框 用途 用户点击 确定 或 取消 按钮时 弹窗会返回一个布尔值 确认返回true 取消返回false 由此可以判断用户
  • adb shell 执行sh脚本_程序开发——Shell脚本

    Shell 是一个用 C 语言编写的程序 它是用户使用 Linux 的桥梁 Shell 既是一种命令语言 又是一种程序设计语言 Shell 是指一种应用程序 这个应用程序提供了一个界面 用户通过这个界面访问操作系统内核的服务 Ken Tho
  • 深入浅出 Spark Thrift Sever

    一 Spark Thrift Sever是什么 Spark借助Hive的Metadata Service可以实现通过命令行客户端工具执行Sql语句 就像是Hive或者Mysql的命令行工具一样 称之为Spark CLI Spark CLI适
  • 基于GMap.Net的地图解决方案

    一 地图的加载与显示 关于GMap的介绍与使用可以看我以前的文章 GMap Net开发之在WinForm和WPF中使用GMap Net地图插件 GMap Net是 Net下一个地图控件 可以基于Http协议加载各个公司的地图 如Google
  • 如何设计一个秒杀系统

    什么是秒杀 秒杀场景一般会在电商网站举行一些活动或者节假日在12306网站上抢票时遇到 对于电商网站中一些稀缺或者特价商品 电商网站一般会在约定时间点对其进行限量销售 因为这些商品的特殊性 会吸引大量用户前来抢购 并且会在约定的时间点同时在
  • MinGW-W64下载、配置教程

    注意 本文采用的操作系统 Windows7 64位 注 文章原创 配图的知乎水印也是笔者账号 一 下载与配置 使用浏览器访问 MinGW W64 图1 找到图2所示区域 根据需求点击一项 下载压缩包 图2 解压下载的压缩包 内容如图3 图3
  • JAVA练习34-验证回文串

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 目录 前言 一 题目 验证回文串 1 题目描述 2 思路与代码 2 1 思路 2 2 代码 总结 前言 提示 这里可以添加本文要记录的大概内容 1月29日练习内容 提示 以下
  • Gin的使用

    Gin框架 gin框架路由使用前缀树 路由注册的过程是构造前缀树的过程 路由匹配的过程就是查找前缀树的过程 gin框架的中间件函数和处理函数是以切片形式的调用链条存在的 我们可以顺序调用也可以借助c Next 方法实现嵌套调用 借助c Se
  • BigDecimal比较大小问题

    BigDecimal比较大小 这个类是Java里精确计算的类 下面说一下两个BigDecimal对象大小 相等的判断 1比较对象是否相等 一般的对象用于等于 但是BigDecimal比较特殊 举个例子 BigDecimal a1 new B
  • android 下拉状态栏(SystemUI)常见修改记录

    摘要 下拉状态栏 1 下拉状态栏的亮度条 frameworks base packages SystemUI src com android systemui qs QSPanel javamBrightnessView对应布局文件 qui