Android Switch控件修改样式

2023-11-16

Android中自带的Switch控件在很多时候总觉得和整体系统风格不符,很多时候,自定义Switch是一种方法。

但其实不用这么麻烦,安卓自带的Switch通过修改一些属性,也可以达到和自定义Switch差不多的一个效果。

个人感觉,Switch的属性设置和其他控件还是有挺大区别的。因此,写下此文,方便有需要的同学参考。

先上效果图:


以上便是修改后效果 与 原生Switch的效果对比。代码在文章底部给出

实现方式:

1.底部滑动条,在开关打开状态为绿色,开关关闭状态为灰色

在 res/drawable 文件夹下面,写两个滑动条的底图 ,通过一个选择器selector进行控制。

gray_track.xml :非打开状态,灰色的底图

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >

    <!-- 高度30   此处设置宽度无效-->
    <size android:height="30dp"/>
    <!-- 圆角弧度 15 -->
	<corners android:radius="15dp"/>
    
	
	<!-- 变化率  定义从左到右的颜色不变 -->
    <gradient
        android:endColor="#888888"
        android:startColor="#888888" />

</shape>
green_track.xml:打开状态下,绿色的底图。
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >

    <!-- 高度40 -->
    <size android:height="30dp"/>
    <!-- 圆角弧度 20 -->
	<corners android:radius="15dp"/>
	<!-- 变化率 -->
    <gradient
        android:endColor="#33da33"
        android:startColor="#33da33" />



</shape>
选择器 track.xml   用于控制Switch不同状态下,滑动条的底图

<?xml version="1.0" encoding="utf-8"?>
<!-- 底层下滑条的样式选择器,可控制Switch在不同状态下,底下下滑条的颜色 -->
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_checked="true"  android:drawable="@drawable/green_track" />
<item                               android:drawable="@drawable/gray_track" />

</selector>

2. 滑动按钮:底色我用的接近白色的淡灰色,打开时,边上的一圈线条为灰色,关闭时,边上的一圈线条为绿色

实现方式和底部滑动一致

gray_thumb.xml  :关闭状态,按钮边上一圈颜色为深灰色

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >

    <!-- 高度40 -->
    <size android:height="40dp" android:width="40dp"/>
    <!-- 圆角弧度 20 -->
	<corners android:radius="20dp"/>
    
	
	<!-- 变化率 -->
    <gradient
        android:endColor="#eeeeee"
        android:startColor="#eeeeee" />
    
    <stroke android:width="1dp"
        android:color="#666666"/>

</shape>
green_thumb.xml : 打开状态,按钮边上一圈的颜色为绿色

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >

    <!-- 高度40 -->
    <size android:height="40dp" android:width="40dp"/>
    <!-- 圆角弧度 20 -->
	<corners android:radius="20dp"/>
    
	
	<!-- 变化率 -->
    <gradient
        android:endColor="#eeeeee"
        android:startColor="#eeeeee" />
    
    <stroke android:width="1dp"
        android:color="#33da33"/>

</shape>
选择器 thumb.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/green_thumb" />
<item                               android:drawable="@drawable/gray_thumb" />
</selector>

3. 将以上选择器设置给Switch,就好了

界面  activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <Switch
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:switchMinWidth="20dp"
        android:textOn="  "
        android:textOff="  "
        android:thumb="@drawable/thumb"
        android:track="@drawable/track" />
    
    <!-- 用于对比使用的不设置任何属性的Switch -->
    <Switch 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />

</LinearLayout>

4.高度,宽度的设置

细心的同学会发现,修改  android:layout_width  , android:layout_height  这两个属性,并不会实际修改Switch的大小

设置大了,边上会出现空白部分,设置小了,Switch显示不全。


实际设置高度方法:

上面定义滑动条和按钮底图的地方相信大家都注意到,   <size android:height="30dp"/>  这行代码,

修改  green_track.xml,gray_track.xml  中的高度,即可修改高度(修改green_thumb.xml  gray_thumb.xml  中的高度貌似无效)。

实际修改宽度的方法:

(1)修改滑动按钮的宽度:滑动按钮的宽度和按钮上的文字有关,

想要按钮变长,在按钮显示的文字上添加几个空字符串即可,想要按钮变短的话,减少按钮上显示的字即可(修改按钮上字体大小也可以试试)

Switch的属性

        android:textOn="  "
        android:textOff="  "

(2)修改按钮  打开,关闭  两种状态之间滑动距离(貌似小到一定程度,再改小就无效了)

Switch的属性

android:switchMinWidth="20dp"


通过以上的设置,相信能满足大部分实际使用的需求了,希望对大家有帮助。


相信源代码才是大家最关注的吧,哈哈,我也是!
下载地址:   http://download.csdn.net/detail/qq_34763699/9751234

百度网盘:http://pan.baidu.com/s/1slp1CZV




本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android Switch控件修改样式 的相关文章

随机推荐

  • FinalShell 介绍

    官网 http www hostbuf com FinalShell是一体化的的服务器 网络管理软件 不仅是ssh客户端 还是功能强大的开发 运维工具 充分满足开发 运维需求 特色功能 免费海外服务器远程桌面加速 ssh加速 双边tcp加速
  • 设置linux ip命令

    设置linux ip命令 http hi baidu com BD F1 C8 D5 C8 C8 B5 E3 blog item 0b7256308902e19da9018e11 html ifconfig eth0 192 168 168
  • pytorch 自学笔记@_@

    课程 dataset 类 from torch utils data import Dataset from PIL import Image import os class MyData Dataset def init self roo
  • java处理跨域处理

    经常遇到加了跨域但是前端访问还是会跨域 很有可能是没有走你写的跨域的流程 这时候加一个优先级就可以解决这个问题了 一般都是用这个方法 Bean public CorsFilter corsFilter UrlBasedCorsConfigu
  • 用C语言表白

    int day for day 0 day lt Mylife day printf i love you 我们相遇的那一刻起 我愿用一辈子 每天爱你
  • 整十粉丝庆祝文章系列内容征集建议

    亲爱的读者们 大家好 作为一名文章作者 我深知没有读者的支持和喜爱 我的文字就只是无意义的文字堆积 因此 为了庆祝与感谢大家长久以来的支持 我准备举办一场特别的活动 粉丝庆祝文章系列内容征集建议 我想听听你们的声音 了解你们对我写作的喜好
  • 堆和栈的区别以及联系

    堆与栈的区别有 栈内存存储的是局部变量而堆内存是实体 栈内存的更新速度高于堆内存 栈内存的生命周期一结束就会被释放而堆内存会被垃圾回收机制不定时回收 栈中存放的是对象的引用及对象方法中的局部变量的值 参数的值 堆中存放的是实例对象及成员变量
  • 树状结构数据的数据库表设计及使用 - 4. 嵌套集(Nested Set)模型

    本文以 MySQL 为例 文档比较长 故分为5部分发出 邻接表 Adjacency List 模型 路径枚举 Path Enumeration 模型 闭包表 Closure Table 模型 嵌套集 Nested Set 模型 性能比较与分
  • Mac快速打开terminal终端快捷键操作

    Command 空格键跳出搜索框 输入ter 按 enter即可打开
  • 调试osgEarth(33)分页瓦片卸载器子节点的作用-(3)渲染遍历的帧号和时间设置-_真正的terrain使用TerrainCuller---水平方向剔除

    如果还记得来自于何方 看看一个月前如何引入TerrainCuller的 如何判断是否该cull呢 在这里先打个断点 用的包围球 可见 通过VIEW FRUSTUM CULLING SMALL FEATURE CULLING SHADOW O
  • webrtc服务器搭建

    两年前写的笔记 可能有些链接和方式已经不对了 自己评估 文章目录 名词解释 概要 房间服务 信令服务 ICE STUN TURN 服务 Web服务的安装与配置 房间服务 安装与配置 安装 信令服务 turn服务 参考 扩展阅读 other
  • 常用的医学图像分割评价指标

    常用的图像分割评价指标非常多 论文中常用的指标包括像素准确率 交并比 IOU Dice系数 豪斯多夫距离 体积相关误差 下面提到的所有案例都是二分类 标签中只有0和1 目录 一 像素准确率 二 交并比IOU 三 骰子系数Dice 四 Hau
  • 【JavaScript高级】原型和继承相关:原型对象、函数原型、原型链和继承、继承的优化、对象判断相关方法

    文章目录 原型对象 对象的原型 函数的原型 函数原型作用 new操作原型的赋值 将方法放在原型上 constructor属性 在原型中新增属性 重写函数原型对象 原型链和继承 原型链 原型链实现方法的继承 借用构造函数属性继承 继承的优化
  • java8 stream 转换list、map、set

    一 Collection Collections collect Collector Collectos Collection是Java集合的祖先接口 Collections是java util包下的一个工具类 内涵各种处理集合的静态方法
  • 基于FPGA的正弦波发生器设计与实现

    基于FPGA的正弦波发生器设计与实现 摘要 本文介绍了一种基于FPGA的正弦波发生器的设计与实现 通过使用FPGA的数字信号处理功能 可以实现高精度 高性能的正弦波生成 文章首先介绍了DDS Direct Digital Synthesis
  • vs2008中,在OCX控件中应用doc/view基本步骤

    1 利用向导创建一个MFC ActiveX Control控件CMyOCX 2 在工程中加入ActivDoc头文件和执行文件 class CActiveXDocTemplate public CSingleDocTemplate enum
  • 阿里-淘菜菜一面(电话面试)面经

    上来我先给面试官打预防针 我说我准备时间不长 可能不太行 意思是想推迟一段时间再面试 他让我别紧张 面试时间定下来不容易 就先直接面试 问题如下 1 在学校还是在家里 课程怎么样了 在学校 学分修完了 目前在学技术 2 自我介绍 人工智能学
  • Android LayoutInflater原理分析,带你一步步深入了解View(一)

    相信接触Android久一点的朋友对于LayoutInflater一定不会陌生 都会知道它主要是用于加载布局的 而刚接触Android的朋友可能对LayoutInflater不怎么熟悉 因为加载布局的任务通常都是在Activity中调用se
  • 数字化转型背景-数字化转型网

    数字化转型网szhzsw cn 数字化转型是指企业或组织将传统业务模式 流程 技术和文化等方面与数字技术相融合 实现数字化升级和转型的过程 数字化转型的背景有以下几个方面 技术发展 随着科技的不断进步 各种数字技术不断涌现 包括人工智能 物
  • Android Switch控件修改样式

    Android中自带的Switch控件在很多时候总觉得和整体系统风格不符 很多时候 自定义Switch是一种方法 但其实不用这么麻烦 安卓自带的Switch通过修改一些属性 也可以达到和自定义Switch差不多的一个效果 个人感觉 Swit