Android 自定义Switch开关按钮的样式实例详解

 更新时间:2017年12月07日 10:13:08   作者:容华谢后  
本文主要讲的是在Android原生Switch控件的基础上进行样式自定义,内容很简单,但是在实现的过程中还是遇到了一些问题,在此记录下来,需要的朋友参考下吧
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

封面

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开关按钮的样式,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对程序员之家网站的支持!

相关文章

  • Repo工作原理和使用介绍

    Repo工作原理和使用介绍

    Repo是谷歌用Python脚本写的调用git的一个脚本,可以实现管理多个git库。本文详细讲解了Repo的工作原理和使用介绍,需要的朋友可以收藏下,方便下次浏览观看
    2021-12-12
  • Android开发中解析xml文件XmlUtils工具类与用法示例

    Android开发中解析xml文件XmlUtils工具类与用法示例

    这篇文章主要介绍了Android开发中解析xml文件XmlUtils工具类与用法,结合实例形式分析了Android开发中解析xml文件工具类定义与相关使用技巧,需要的朋友可以参考下
    2018-01-01
  • android车牌识别系统EasyPR使用详解

    android车牌识别系统EasyPR使用详解

    这篇文章主要为大家详细介绍了android车牌识别系统EasyPR使用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-12-12
  • Android?iOS常用APP崩溃日志获取命令方法

    Android?iOS常用APP崩溃日志获取命令方法

    这篇文章主要为大家介绍了Android&iOS常用APP崩溃日志获取命令方法,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • Android NestedScrolling嵌套滚动的示例代码

    Android NestedScrolling嵌套滚动的示例代码

    这篇文章主要介绍了Android NestedScrolling嵌套滚动的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • Android多国语言转换Excel及Excel转换为string详解

    Android多国语言转换Excel及Excel转换为string详解

    这篇文章主要给大家介绍了关于Android多国语言转换Excel以及Excel转换为string的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧
    2019-01-01
  • android实现歌词自动滚动效果

    android实现歌词自动滚动效果

    这篇文章主要为大家详细介绍了android实现歌词自动滚动效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-11-11
  • android 屏幕亮度调节方法详解

    android 屏幕亮度调节方法详解

    分析一下自动调节屏幕亮度手机随着光线的强度自我调节,也就是在亮的光线下屏幕自动亮一些,暗的时候就自动调暗一些,本文将详细介绍android 屏幕亮度调节
    2012-11-11
  • 一文教你如何使用Databinding写一个关注功能

    一文教你如何使用Databinding写一个关注功能

    这篇文章主要介绍了一文教你如何使用Databinding写一个关注功能,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • Android自定义控件实现icon+文字的多种效果

    Android自定义控件实现icon+文字的多种效果

    这篇文章主要为大家详细介绍了Android自定义控件实现icon+文字的多种效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01

最新评论

?


http://www.vxiaotou.com