修改Android自带Switch样式
16lz
2021-01-25
由于Android自带的Switch样式不能应用于所有UI风格的App,因此修改Switch样式是项目中经常要用到的技术,Switch的样式一般来说需要修改以下部分:按钮(thumb)、轨迹(track)以及大小。
首先我们经过尝试可以发现,如果我们直接在布局文件中修改Switch的属性layout_width和layout_height是无法修改Switch的真实大小的,相反只能改变这个Switch布局占的空间大小,Switch按钮的大小并没有发生改变。
在StackOverflow上搜索How to change the size of Switch Widget后,得到了答案(StackOverflow上的高票答案指出Switch大小是由track决定的,但是我自己尝试后发现Switch大小是由thumb决定的)。
实际上控件Switch的大小是由thumb也就是按钮大小决定的,track轨迹会适应thumb的大小,因此若是我们想改变Swicth的大小,我们需要改变Thumb的大小。
下面我们自己写一个thumb,取名为my_thumb.xml
<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <size android:height="20dp" android:width="40dp" /> <gradient android:startColor="#1E90FF" android:endColor="#1E90FF"/> <corners android:radius="180dip"/>shape>
这是一个类似操场形状的thumb,接着再写一个track的选择器switch_setting_selector.xml,实现switch点击后改变底色的功能,这里用的是我自己的图片
<?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/switch_small_bg_yes"/> <item android:drawable="@drawable/switch_small_bg_no"/>selector>
最后在布局文件中放上Switch
"200dp" android:layout_height="wrap_content" android:thumb="@drawable/my_thumb" android:track="@drawable/switch_setting_selector" android:layout_marginTop="100dp"/>
最后效果如下
更多相关文章
- Android自定义漂亮的Dialog
- Android开发指南-用户界面-通用布局对象
- Android五种布局管理器之『LinearLayout』
- 【Android(安卓)UI设计与开发】第06期:底部菜单栏(一)使用TabActivi
- android 4.2的新特性layoutRtl,让布局自动从右往左显示
- 分享五种Android常用布局方式
- Android中LruCache的源码分析
- Android(安卓)沉浸式全屏的实现方法
- 第16章、布局Layouts之GridLayout网格布局(从零开始学Android)