修改Android7.1.1源码改变SwitchButton样式

来源:互联网 发布:阿里云短信接口demo 编辑:程序博客网 时间:2024/05/29 14:23

屏幕控制

我以前常用的屏幕控制软件是 Total Control ,但是它启动很慢,也没啥其他缺点。最近一直在用 Vysor ,这是一款谷歌浏览器插件,速度明显比total control快得多。

SwitchButton

Hierarchy View

这里的 SwitchButton 就是WiFi、蓝牙里的开/关按钮这种,整个Android源码多处用到,样式都是一样的。如图所示:

这里写图片描述

那这个组件到底在Android源码里的哪个位置呢?我们先得利用 Hierarchy View 布局分析工具,如图所示:

这里写图片描述

grep -nr 命令

从Hierarchy View得知该组件id名为switch_widget,首先用grep -nr switch_widget * 命令,得到如图所示内容

这里写图片描述

在res/layout目录下找到switch_bar.xml这个资源文件,打开可以看到没有对SwitchButton进行样式设置,而且com.android.settings.widget.ToggleSwitch 这个可以看出该组件是自定义的,找到ToggleSwitch,用grep -nr命令,即可找到在src/com/android/settings/widget路径下,打开查看里面就五六十行代码,没写什么东西,那么意思就是说很多效果都是在父类中实现的,也就是Switch.java,利用 Android Studio快捷键,ctrl+鼠标左键,直接进入Switch.java,你会发现它是在android/frameworks/base/core/java/android/widget 路径下。

这里写图片描述

这个java类文件里的代码量就非常多了,但修改UI都会有一个入口,如下图所示:

这里写图片描述

利用grep -nr switchStyle 命令,得到如下图:

这里写图片描述

可知,switchStyle这个id存在于6个xml文件中,其中我们要找的最可能的是themes.xml、themes_material.xml、themes_device_defaults.xml中,对应用grep命令查找style id:Widget.CompoundButton.Switch、Widget.Material.CompoundButton.Switch、Widget.DeviceDefault.CompoundButton.Switch,如下图:

这里写图片描述

这里写图片描述

这里写图片描述

从res/res/values目录下找到styles.xml、styles_material.xml、styles_device_defaults.xml的相应位置,最后锁定如下图所示位置styles_material.xml中:

这里写图片描述

红框里的两个drawable均在res/res/drawable目录下,将这两个文件里的所有“?attr/colorControlActivated”改成自己设置的color,直接写值或者放在values/colors_material.xml中。

这里写图片描述

这里写图片描述

效果

这里写图片描述