Android 自定义Switch开关按钮的样式实例详解
作者:容华谢后 发布时间:2023-09-09 16:38:39
封面
GitHub传送门
1.写在前面
本文主要讲的是在Android原生Switch控件的基础上进行样式自定义,内容很简单,但是在实现的过程中还是遇到了一些问题,在此记录下来,希望对大家能够有所帮助,看下效果图:
自定义样式
2.自定义样式
2.1 原生样式
首先看下原生的效果(Android 7.1):
原生效果
布局文件如下:
<Switch
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
2.2 自定义样式
设计给的效果图大多数都不会使用原生效果,所以我们需要对样式进行自定义,比如下面这种效果:
自定义效果
定义Switch的开关按钮状态:
开启状态:switch_custom_thumb_on.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="#94C5FF" />
<size
android:width="20dp"
android:height="20dp" />
</shape>
关闭状态:switch_custom_thumb_off.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="#AAA" />
<size
android:width="20dp"
android:height="20dp" />
</shape>
定义一个selector:switch_custom_thumb_selector.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/switch_custom_thumb_on" android:state_checked="true" />
<item android:drawable="@drawable/switch_custom_thumb_off" android:state_checked="false" />
</selector>
到此Switch的开关按钮状态就定义好了,接下来定义一下Switch滑动轨道的状态:
开启状态:switch_custom_track_on.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#B6D6FE" />
<stroke
android:width="5dp"
android:color="#00000000" />
<corners android:radius="20dp" />
</shape>
关闭状态:switch_custom_track_off.xml
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#E3E3E3" />
<stroke
android:width="5dp"
android:color="#00000000" />
<corners android:radius="20dp" />
</shape>
定义一个selector:switch_custom_track_selector.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/switch_custom_track_on" android:state_checked="true" />
<item android:drawable="@drawable/switch_custom_track_off" android:state_checked="false" />
</selector>
Switch自定义样式,默认情况下开关按钮和滑动轨道的高度是一样的,并且在xml文件中对轨道的宽高设置是无效的,如果想要修改轨道的高度可以这样做:
轨道高度低于开关按钮高度(效果中的第一个效果):轨道增加一个透明的边框
轨道高度高于开关按钮高度(效果中的第二个效果):开关按钮增加一个透明的边框
轨道的宽度会随着开关按钮的宽度自动变化,如果想要修改轨道的宽度,修改开关按钮的宽度就可以了。
设置自定义样式
thumb是开关按钮的属性,track是滑动轨道的属性,只需要把上面的两个selector文件设置进去就大功告成了。
<Switch
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:thumb="@drawable/switch_custom_thumb_selector"
android:track="@drawable/switch_custom_track_selector" />
3.更多属性
如果想要在开关按钮上显示文字怎么办,textOn和textOff属性可以分别设置开启和关闭的文字,别忘了将showText属性设置为true,这样才能显示出来:
<Switch
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:showText="true"
android:switchTextAppearance="@style/SwitchTheme"
android:textOff="OFF"
android:textOn="ON"
android:thumb="@drawable/switch_rectangle_thumb_selector"
android:track="@drawable/switch_rectangle_track" />
显示文字还不够,还需要修改文字的颜色:
在res文件夹下建一个color文件夹,定义一个文本颜色状态的selector:switch_text_selector.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="#FFF" android:state_checked="false" />
<item android:color="#000" android:state_checked="true" />
</selector>
然后在style文件中定义一个样式:
<style name="SwitchTheme" parent="@android:style/TextAppearance.Small">
<item name="android:textColor">@color/switch_text_selector</item>
</style>
最后在Switch中设置一下就可以了:
android:switchTextAppearance="@style/SwitchTheme"
4.写在最后
本文只讲了效果图中第一种样式的实现方法,更多样式可以在GitHub上进行下载查看,如有疑问,可以给我留言。
GitHub传送门
总结
以上所述是小编给大家介绍的Android 自定义Switch开关按钮的样式网站的支持!
来源:http://www.jianshu.com/p/4e436300f328
猜你喜欢
- 本文实例为大家分享了Unity Shader实现描边OutLine效果的具体代码,供大家参考,具体内容如下Shader实现描边流程大致为:对
- spring boot是个好东西,可以不用容器直接在main方法中启动,而且无需配置文件,方便快速搭建环境。可是当我们要同时启动2个spri
- 1.一段简单的代码首先来一段代码,这个是单例模式,可能有的人不知道什么是单例模式,我就简单说一下单例模式是指一个类有且只有一种对象实例。这里
- 先建个钉钉群,并加好机器人此时,机器人已经添加完毕,接下来编写我们连接机器人小哥的代码import com.alibaba.fastjson
- 前言: Java 8已经公布有一段时间了,种种迹象表明Java 8是一个有重大改变的发行版。在Java Code Geeks上已经有很多介绍
- 本文实例讲述了C#实现的文件压缩和解压缩类。分享给大家供大家参考。具体分析如下:这个C#代码包含了几个类,封装了文件压缩和解压缩常用的方法,
- 本文实例讲述了Java设计模式之模板方法模式。分享给大家供大家参考,具体如下:我们在生活中,很多事情都包含特定的一些步骤。如去银行办理业务,
- startJVM是加载jvm用的方法。在JPype,apache mod等等很多地方都用到。但凡要用其他语言来加载jvm进程,就要用到这个。
- java Swing基础教程之图形化实例代码与多线程、泛型等不同,Swing主要在于使用。 下面主要放代码和注释,少说话。(一)
- RTF文档即富文本格式(Rich Text Format)的文档。我们在处理文件时,遇到需要对文档格式进行转换时,可以将RTF转为其他格式,
- Collectors.toMap空指针问题在工作中遇到了一个List转Map的时候的一个NullPointException.情形很简单,问
- Java连接SQLServer 2008数据库的步骤:1.到微软官方下载jdbc 并解压,得到sqljdbc.jar和sqljdbc4.ja
- 现在很多的网站都提供有用户注册功能, 通常我们注册成功之后就会收到一封来自注册网站的邮件。邮件里面的内容可能包含了我们的注册的用户名和密码以
- 本文实例讲述了Java使用Jdbc连接Oracle执行简单查询操作。分享给大家供大家参考,具体如下:Java Jdbc 连接 Oracle
- 提到迭代器我们不能不想到迭代器模式,那我就以迭代器模式作为开场白.在我们的应用程序中常常有这样一些数据结构:它们是一个数据的集合,如果你知道
- 1、添加一个App.config配置文件。2、配置服务http://Lenovo-PC:80/EvisaWS/WharfService?ws
- JAVA接口的概念官方解释:Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不
- 本文实例为大家分享了java生成随机字符串的具体代码,供大家参考,具体内容如下import java.util.Random;public
- 一、包装类概述Java有8种基本数据类型:整型(byte、short、int、long)、浮点型(float、double)、布尔型bool
- 1. 问题的提出Struts2中如果实现了ModelDriven<model>接口就可以将传来的参数注入到model中了,就可以