android4.0新控件Switch方法解析

Android Switch自定义样式全解析:从基础到高级实战 在Android应用开发中,UI组件定制化是提升应用专业度和用户体验的关键环节。开关按钮(Switch)作为高频交互控件,其默认样式往往难以满足个性化设计需求。通过深入理解其内部构成(轨道、滑块、状态)与绘制原理,开发者可以借助XML选择器(Selector)、形状可绘制(Shape Drawable)和样式(Style)系统,实现对视觉细节的完全掌控。这不仅涉及颜色、形状的自定义,更需考虑状态管理、性能优化及多版本兼容性。掌握Switch自定义技术,能有效解决**UI风格统一**和**视觉体验提升**等核 阅读详情

原文地址:http://blog.youkuaiyun.com/lilu_leo/article/details/7661459




就是很像开关的那种控件,它只有两个状态:on和off:在IOS中,有个UISwitch控件,其效果图,如下:

                                     

在android4.0里面,添加了一个和这个类似的控件:Switch,很形象,开关。效果图如下:

             


其类关系图如下:

java.lang.Object
   ↳ android.view.View
     ↳ android.widget.TextView
       ↳ android.widget.Button
         ↳ android.widget.CompoundButton
           ↳ android.widget.Switch
父类:compoundButton。

类的概述:

    Switch是一个可以在两种状态切换的开关控件。用户可以拖动"thumb"来回选择,也可以像选择复选框一样点击切换Switch的状态。

主要方法:

Public Methods
int getCompoundPaddingRight()
Returns the right padding of the view, plus space for the right Drawable if any.
CharSequence getTextOff()
Returns the text displayed when the button is not in the checked state.
CharSequence getTextOn()
Returns the text displayed when the button is in the checked state.
void jumpDrawablesToCurrentState()
Call  Drawable.jumpToCurrentState() on all Drawable objects associated with this view.
void onMeasure(int widthMeasureSpec, int heightMeasureSpec)

Measure the view and its content to determine the measured width and the measured height.

void onPopulateAccessibilityEvent( AccessibilityEvent event)
Called from  dispatchPopulateAccessibilityEvent(AccessibilityEvent) giving a chance to this View to populate the accessibility event with its text content.
boolean onTouchEvent( MotionEvent ev)
Implement this method to handle touch screen motion events.
void setChecked(boolean checked)

Changes the checked state of this button.

void setSwitchTextAppearance( Context context, int resid)
Sets the switch text color, size, style, hint color, and highlight color from the specified TextAppearance resource.
void setSwitchTypeface( Typeface tf, int style)
Sets the typeface and style in which the text should be displayed on the switch, and turns on the fake bold and italic bits in the Paint if the Typeface that you provided does not have all the bits in the style that you specified.
void setSwitchTypeface( Typeface tf)
Sets the typeface in which the text should be displayed on the switch.
void setTextOff( CharSequence textOff)
Sets the text displayed when the button is not in the checked state.
void setTextOn( CharSequence textOn)
Sets the text displayed when the button is in the checked state.

getCompoundPaddingRight():没弄清楚什么意思。

在TextView中的源码:

[java]  view plain copy
  1. <span style="font-family:System;">public int getCompoundDrawablePadding() {  
  2.         final Drawables dr = mDrawables;  
  3.         return dr != null ? dr.mDrawablePadding : 0;  
  4.     }</span>  

jumpDrawableToCurrentState():在与Switch相关的Drawable操作时调用 Drawable.jumpToCurrentState()这个方法。

     getTextOff()、getTextOn()、 setTextOff()、setTextOn()这四个方法比较简单,就是设定和获取非选中和选中状态下的文本值。

     onMeasure():测量控件宽高,供绘图时使用。

     onTouchEvent(MotionEvent ev)实现这一方法传递触摸屏运动事件。

setChecked()设置Switch的状态(选中,非选中)

setSwitchTextAppearance()设置字体大小

setSwitchTextTypefaces设置字体格式


看看google官方在/frameworks/base/core/res/res/values/styles.xml的一个定义:

[java]  view plain copy
  1. <span style="font-family:System;"><span style="color:#000000;"><style name="Widget.Holo.CompoundButton.Switch">  
  2.         <item name="android:track">@android:drawable/switch_track_holo_dark</item>  
  3.         <item name="android:thumb">@android:drawable/switch_inner_holo_dark</item>  
  4.         <item name="android:switchTextAppearance">@android:style/TextAppearance.Holo.Widget.Switch</item>  
  5.         <item name="android:textOn">@android:string/capital_on</item>  
  6.         <item name="android:textOff">@android:string/capital_off</item>  
  7.         <item name="android:thumbTextPadding">12dip</item>  
  8.         <item name="android:switchMinWidth">96dip</item>  
  9.         <item name="android:switchPadding">16dip</item>  
  10.     </style></span></span>  

可以在main.xml中这样定义:

[java]  view plain copy
  1. <span style="font-family:System;"><span style="color:#000000;"><Switch   
  2.         android:id="@+id/demo_switch"  
  3.         android:layout_width="wrap_content"  
  4.         android:layout_height="wrap_content"  
  5.         android:layout_below="@+id/textView"  
  6.         android:textOn="开"  
  7.         android:textOff="关"  
  8.         /></span></span>  

当Switch状态切换时:

[java]  view plain copy
  1. <span style="font-family:System;"><span style="color:#000000;">mSwitch.setOnCheckedChangeListener(new OnCheckedChangeListener() {  
  2.               
  3.             @Override  
  4.             public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {  
  5.                 if(isChecked) {  
  6.                     //选中时 do some thing   
  7.                     statusText.setText("开");  
  8.                 } else {  
  9.                     //非选中时 do some thing   
  10.                     statusText.setText("关");  
  11.                 }  
  12.                   
  13.             }  
  14.         });</span></span>  

基本上先简单的讲到这。
Android 4.0风格Switch控件仿制实现详解 Android Switch控件是一种用于在两种状态之间切换的UI组件,常见于设置界面中用于开关选项。自Android 4.0(API 14)引入以来,Switch以其直观的视觉反馈和良好的交互体验,成为Android应用中不可或缺的控件之一。它不仅支持用户通过点击或滑动进行状态切换,还支持监听状态变化的回调机制,便于开发者实现业务逻辑。在现代Android开发中,Switch控件常用于控制功能开关、用户偏好设置等场景。 阅读详情

相关推荐

创建自定义Android 4.0 Switch控件样式实战示例

在Android开发中,自定义控件样式是提升用户体验的重要方式之一。本章我们将探索如何自定义Switch控件的样式,从而使其与我们的应用主题更加协调,更好地满足用户个性化的需求。自定义Switch控件样式常见的需求包括改变控件的颜色、尺寸,以及在状态变化时添加动画效果,甚至可以为Switch控件添加文字描述,来提高其易读性。我们将在后续章节中逐一探讨这些需求的实现方法。让我们从自定义Switch的颜色和尺寸开始,进一步提升控件的视觉效果和用户交互体验。

weixin_32324637的博客 949

android 4.0新控件 Switch 方法解析

前言          欢迎大家我分享和推荐好用的代码段~~ 声明          欢迎转载,但请保留文章原始出处:          优快云:http://www.csdn.net          雨季o莫忧离:http://blog.csdn.net/luckkof 正文          就是很像开关的那种控件,它只有两个状态:on和off:在IOS中,有个UI

奥特曼 1786

vue3+ts项目里如何使用状态管理pinia以及数据持久化

vue3 pinia 数据持久化

ICUiseeyou的博客 8793

Android 4.0新控件Switch方法解析

onMeasure():测量控件宽高,供绘图时使用。       onTouchEvent(MotionEvent ev)实现这一方法传递触摸屏运动事件。 setChecked()设置Switch的状态(选中,非选中) setSwitchTextAppearance()设置字体大小 setSwitchTextTypefaces设置字体格式

561

特征提取 Features Extraction

介绍了特征提取的基本概念,从分类变量,文本信息和图片信息中进行特征提取的方法,以及实现特征提取的类库

JasonH2021的博客 1万+

从零到一:如何用YOLOv8和PyQt5打造一个高效的路面坑洞检测系统

本文详细介绍了如何利用YOLOv8和PyQt5开发一个高效的路面坑洞检测系统。从环境配置、数据采集标注到模型训练优化,再到PyQt5界面开发与系统集成,提供了完整的实战指南。该系统结合深度学习技术,显著提升了道路检测的准确性和效率,适用于各类道路维护场景。

weixin_29047919的博客 308

android 新控件Switch的方法解析

就是很像开关的那种控件,它只有两个状态:on和off:在IOS中,有个UISwitch控件,其效果图,如下: 在android4.0里面,添加了一个和这个类似的控件:Switch,很形象,开关。效果图如下:     其类关系图如下: java.lang.Object android.view.View android.widget.TextView android.w

1014

RK平台MPP编解码实战:从源码编译到性能测试全解析

本文详细解析了在RK(瑞芯微)平台上进行MPP(Media Process Platform)多媒体编解码实战的全过程。从源码获取、交叉编译环境搭建、常见编译问题排查,到测试程序的修改调试与性能测试分析,提供了从零到一的完整指南。文章通过实测数据展示了MPP硬件编解码在嵌入式设备上的高性能与低功耗优势,帮助开发者快速掌握这一关键技术,应用于智能摄像头、视频会议终端等产品开发。

weixin_28273593的博客 542

android4.0 Switch方法解析

就是很像开关的那种控件,它只有两个状态:on和off:在IOS中,有个UISwitch控件,其效果图,如下:                                       在android4.0里面,添加了一个和这个类似的控件:Switch,很形象,开关。效果图如下:               其类关系图如下: java.l

Seeker的专栏 1532

Xilnx大学计划/XUP ZYNQ ZU开发板

TUL PYNQ™-ZU板,基于Xilinx Zynq UltraScale+ MPSoC,是为Xilinx大学项目设计的,以支持Xilinx PYNQ (Python Productivi-ty for Zynq)开源框架和嵌入式系统开发。

weixin_57025922的博客 946

miRNA测序数据生信分析——第二讲,数据库下载整理

一个非编码RNA的整合数据库,可用来识别鉴定各种类型的ncRNA。提供的是ncRNA在基因组上的基因序列,而非转录成熟ncRNA的序列。最新版:2022-11-02Rfam数据库中ncRNA类型分三大类:Cis-reg和Gene和Intron。这三大类又有子类。一个提供包括miRNA序列数据、注释、预测基因靶标等信息的全方位数据库,是存储miRNA信息最主要的公共数据库之一。最新版:2018-12-01。

weixin_44616693的博客 4098

终极指南:yuzu-android - 在安卓设备上畅玩Switch游戏的完整教程

你是否曾想过在安卓手机或平板上体验任天堂Switch游戏?现在,yuzu-android项目让这个梦想成为现实!这是一个专为Android平台设计的开源Switch模拟器,让你无需购买昂贵的游戏主机,就能在移动设备上享受Switch游戏的乐趣。无论你是游戏爱好者、开发者还是技术探索者,这个项目都将为你打开一扇全新的大门。 ## 🎯 项目亮点展示 yuzu-android项目拥有几个令人印象深

gitblog_00060的博客 573

别再被无限debugger卡住了!Chrome DevTools实战绕过技巧(含Hook与文件替换)

本文详细介绍了如何通过Chrome DevTools绕过无限debugger封锁的实战技巧,包括Hook技术与文件替换方法。针对常见的定时器轰炸、循环陷阱和动态注入等反调试手段,提供了高效的解决方案,帮助开发者快速突破调试障碍,提升爬虫和逆向工程效率。

weixin_30326515的博客 241

Android4.0 Switch方法解析

就是很像开关的那种控件,它只有两个状态:on和off:在IOS中,有个UISwitch控件,其效果图,如下:在android4.0里面,添加了一个和这个类似的控件:Switch,很形象,开关。效果图如下:其类关系图如下:java.lang.Objectandroid.view.Viewandroid.widget.TextViewandroid.widget.Buttonan...

weixin_34319111的博客 136

《Java开发及前端最全面试题-Offer直通车》目录

Java开发是需求最广,工资高的细分领域,同时也是会的人最多,有的公司招1个Java开发,要面试几十甚至上百面试者,同时要求很高,要求通晓技术栈很多及很深深度。如果你正准备面试,想要脱颖而出,那么《Java开发及前端最全面试题-Offer直通车》是你的不二选择。本书汇集了多篇超过1万字的精华内容,无论是Java基础、数据库、SpringBoot和SpringCloud等必问的,还是前端、k8s等容器和虚拟化和大数据各类技术面试,本书都为你提供了最全面的试题和参考答案。

大模型大数据攻城狮的专栏 1178

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

android源码解析--switch

请不要问,为什么这一次突然说到switch了,我也不知道,可能是看到前面的文章了吧, android4.0新控件Switch方法解析,然后今天就看下switch的源码。 先看下类概述:A Switch is a two-state toggle switch widget that can select between two options. The user may drag the "thu

傲慢的上校的专栏 1万+

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Android 4.0 Switch 控件用源代码实现

最近项目需要,在4.0 以前的版本上实现一个android 4.0 上的Switch控件,上网找了些例子,都不尽如人意。自己动手,丰衣足食。于是便翻看源码,找到4.0源码中Switch实现的方法。照样子实现了一个,基本上跟4.0的效果一样,使用上没有任何差异。 直接上图: 以下是Switch控件实现的源码: 代码片段,双击复制 01 02 0

薇薇的专栏 1499

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

终极指南:如何在Android手机上畅玩任天堂Switch游戏

你是否曾经梦想过在手机上体验《塞尔达传说:旷野之息》或《马里奥赛车8》的乐趣?现在,这个梦想通过yuzu-android项目变成了现实!🎮 yuzu-android是一个专为Android设备设计的开源任天堂Switch模拟器,让你能够随时随地享受Switch游戏的精彩体验。 ## 项目亮点速览 ✨ **yuzu-android** 不仅仅是一个简单的模拟器,它是一个完整的技术奇迹: -

gitblog_00632的博客 1170
上一篇: Wi-Fi Direct
下一篇: Android JNI 使用的数据结构JNINativeMethod详解
androidboy365
博客等级 码龄16年 35粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值