修改Switch 的颜色
1:效果图

2:布局
<Switch
android:id="@+id/switch_bg"
style="@style/switchStyle"
android:layout_width="30dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:checked="false"
android:switchMinWidth="52dp" />
3:switchStyle
<style name="switchStyle">
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_width">wrap_content</item>
<item name="android:textOff">""</item>
<item name="android:textOn">""</item>
<item name="android:thumb">@drawable/switch_thumb</item>
<item name="android:thumbTextPadding">10dp</item>
<item name="android:track">@drawable/switch_track</item>
</style>
4: switch_thumb
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:drawable="@drawable/abc_btn_switch_to_on_mtrl_00012" />
<item android:drawable="@drawable/abc_btn_switch_to_on_mtrl_00001" />
</selector>
5: switch_track
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" >
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<size android:width="@dimen/switch_w"
android:height="@dimen/switch_h"/>
<solid android:color="@color/colorDefaultThemeGreen"/>
<corners android:radius="@dimen/switch_r"/>
</shape>
</item> <item android:state_checked="false" >
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<size android:width="@dimen/switch_w"
android:height="@dimen/switch_h"/>
<solid android:color="@color/colorGray"/>
<corners android:radius="@dimen/switch_r"/>
</shape>
</item> </selector>
6:实现方法
  private void setSwitchColor(Switch switch_bg,int color){
        StateListDrawable stateListDrawable = (StateListDrawable) switch_bg.getTrackDrawable();
        try {
            Class stateListDrawableClass = StateListDrawable.class;
            Method getStateCountMethod = stateListDrawableClass.getDeclaredMethod("getStateCount", new Class[0]);
            Method getStateSetMethod = stateListDrawableClass.getDeclaredMethod("getStateSet", int.class);
            Method getDrawableMethod = stateListDrawableClass.getDeclaredMethod("getStateDrawable", int.class);
            int count = (Integer) getStateCountMethod.invoke(stateListDrawable, new Object[]{});
            Log.d("Tag:", "setSwitchColor: --count:  "+count);
            for (int i = 0; i < count; i++) {
                int[] stateSet = (int[]) getStateSetMethod.invoke(stateListDrawable, 0);
                if (stateSet == null || stateSet.length == 0) {
                    GradientDrawable drawable = (GradientDrawable) getDrawableMethod.invoke(stateListDrawable, i);
                    drawable.setColor(color);
                } else {
                    Log.d("Tag:", "setSwitchColor:length: "+stateSet.length);
                    for (int j = 0; j < stateSet.length; j++) {
                        Log.d("Tag:", "setSwitchColor: "+stateSet[j]);
                        if(stateSet[j]==android.R.attr.state_checked){
                            Drawable drawable = (Drawable) getDrawableMethod.invoke(stateListDrawable, j);
                            drawable.setColorFilter(color, PorterDuff.Mode.SRC_ATOP);
                        }else {
                            Drawable drawable = (Drawable) getDrawableMethod.invoke(stateListDrawable, j);
                            drawable.setColorFilter(Color.RED, PorterDuff.Mode.SRC_ATOP);
                        }
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
7:code
链接: https://pan.baidu.com/s/1h-KzOa-_mOrqlsSMqttZKQ 密码: i9uh
修改Switch 的颜色的更多相关文章
- Android Studio -修改LogCat的颜色
		
Android Studio -修改LogCat的颜色 author:Kang,Leo weibo:http://weibo.com/kangyi 效果图 设置 Preference->Edit ...
 - 复选框输入Android Studio 如果修改LogCat的颜色,默认全是黑色看着挺不舒服的
		
今天一直在查找复选框输入之类的问题,上午正好有机会和大家分享一下. 怎么找到并表现LogCat这里就不需要再讲了吧,主要说一下本篇的主题,如何修改他的颜色 .我们在使用Eclipse的时候应该都用过L ...
 - 修改tabbar 字体颜色
		
NSDictionary *seletedTextAttrs = @{NSForegroundColorAttributeName:[UIColor orangeColor]}; 修改tabbar 字 ...
 - 如何解决在GDI画图中,多次修改画笔的颜色
		
首先创建个画笔对象: CPen gPen;gPen.CreatePen(PS_SOLID, 1, RGB(120,120,130));//一定灰度的画笔〈/br〉CPen* pOldPen = pDC ...
 - 修改UISearchBar背景颜色
		
UISearchBar是由两个subView组成的,一个是UISearchBarBackGround,另一个是UITextField. 要IB中没有直接操作背景的属性.方法一:是直接将 UISearc ...
 - jquery入门 修改网页背景颜色
		
我们在浏览一些网站,尤其是一些小说网站的时候,都会有修改页面背景颜色的地方,这个功能使用jquery很容易实现. 效果图: show you code: <!doctype html> & ...
 - 修改cocos2dx 背景颜色
		
只需要在AppDelegate的设置FPS后面加入一行: glClearColor(1.0, 1.0, 1.0, 1.0); 同理如果要修改成其它颜色,只需修改里面的值即可( r, g, b, a);
 - ubuntu修改顶栏颜色
		
title: ubuntu修改顶栏颜色 toc: false date: 2018-09-29 19:14:01 categories: methods tags: Ubuntu 编辑shell主题的 ...
 - HTML 颜色输入框修改事件的触发,以及获取修改后的颜色
		
HTML 颜色输入框修改事件的触发,以及获取修改后的颜色 <!DOCTYPE html> <html lang="en"> <head> < ...
 
随机推荐
- P2386 放苹果
			
题目背景 (poj1664) 题目描述 把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分发(5,1,1和1,1,5是同一种方法) 输入输出格式 输入格式: 第一行是测试 ...
 - 【数值计算方法】二分法求根的C++简单实现
			
给定精确度ξ,用二分法求函数f(x)零点近似值的步骤如下: 1 确定区间[a,b],验证f(a)·f(b)<0,给定精确度ξ. 2 求区间(a,b)的中点c. 3 计算f(c). (1) 若f( ...
 - python - 函数的定义和使用
			
目录 函数的定义和使用 一. 为什么要用函数? 二. 函数的参数 三. 函数的变量 global和nolocal 四. 递归函数 五. lamabda匿名函数 函数的定义和使用 1 def test( ...
 - Django-搭建win7虚拟环境-virtualenv
			
为什么要配置Django虚拟环境? 例如:在开发Python Django的时候,系统安装的Python3只有一个版本:3.6.所有第三方的包都会被pip安装到Python3的site-package ...
 - css的基本操作学习--css样式,选择器,hover,文字属性,文本属性,背景
			
什么是css? 通配符选择器 <head> /* *通配符选择器 匹配任何元素 */ *{ margin: 0; padding: 0; } </head> css样式有三种 ...
 - noip模拟赛 整除
			
分析:最暴力的思想就是枚举一边啦,然后就会发现有很多n/i的结果都是相同的,可以每次跳过这一段,这样能过60分. 想不出其它解法了,打个表找了一下规律: ans num 1 1 2 ...
 - 开启mysql远程连接
			
mysql默认只允许本地连接,也就是说,在安装完mysql后会存在两个root账户,他们的host分别是localhost和127.0.0.1 use mysql; update user set h ...
 - nyoj_18_The Triangle_201312071533
			
The Triangle 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 (Figure ...
 - [bzoj3126][USACO2013]Photo_动态规划_单调队列
			
Photo bzoj-3126 题目大意:给你一个n长度的数轴和m个区间,每个区间里有且仅有一个点,问最多能有多少个点. 注释:$1\le n \le 2\cdot 10^5$,$1\le m\le1 ...
 - android 通用菜单条实现(一)
			
一.前言介绍 直奔主题啦,非常多Android app都有菜单条.菜单条除了背景图片.图标的不同外,布局基本一致.大致能够分为三部分:菜单条的左側区域.菜单条中间区域.菜单条右側区域. 为了考虑代码的 ...