Android 基础知识4-3.6 ToggleButton(开关按钮)Switch(开关)详解
一、ToggleButton(开关按钮)
1.1、简介
ToggleButton 类似开关有开和关两种状态,不同的状态下可以有不同的文本。
public class ToggleButton extends CompoundButton
Displays checked/unchecked states as a button with a "light" indicator and by default accompanied with the text "ON" or "OFF"。
这是一种特殊的有两种状态的继承至CompoundButton的控件,在不同的状态会有高亮显示效果,既然是继承至CompoundButton,那我们也随便看一下CompoundButton的介绍:
A button with two states, checked and unchecked. When the button is pressed
or clicked, the state changes automatically.
1.2、属性
android:checked = “true”
默认为选中状态,反之false即是默认为非选中状态。
android:textOff = “张起灵” 未选中状态下的文本是张起灵
android:textOn = “张无忌” 选中状态下的文本是张无忌
1.3.1、示例1
效果图:
XML:
<ToggleButtonandroid:layout_width="match_parent"android:layout_height="wrap_content"android:text="ToggleButton"android:textAllCaps="false"android:textOff="张起灵"android:textOn="张无忌" />
1.3.2、示例2
同样的,我们可以监听不同的状态来设置不同的背景,来适配不同的使用场景,这个背景设置和Button中的一模一样。只是针对的状态不同而已,记得在Button中,我们的Drawable如下:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@color/colorAccent"></item>
<item android:state_pressed="false" android:drawable="@color/colorPrimary"></item>
</selector>
在我们的ToggleButton中,我们的背景Drawable如下:
<?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/open"></item>
<item android:state_checked="false" android:drawable="@drawable/close"></item>
</selector>
可见,都是根据控件状态来切换照片,只是对应的状态不同罢了。运行的效果如下:
在上面我们也说了,这个控件通常对应两种状态,那么如何监听状态的变化了,我们可以通过其父类CompoundButton.OnCheckedChangeListener接口实现,具体代码如下:
//设置状态变化监听
toggleButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked){
}else {
}
}
});
这样,我们就可以在不同状态下处理不同的逻辑了。
二、Switch(开关)
2.1 简介
Switch是一个可以再两种状态切换的开关控件。用户可以拖动来选择,也可以像选择复选框一样点击切换Switch的状态
2.2 属性
android:showText:设置on/off的时候是否显示文字,boolean
android:splitTrack:是否设置一个间隙,让滑块与底部图片分隔,boolean
android:switchMinWidth:设置开关的最小宽度
android:switchPadding:设置滑块内文字的间隔
android:switchTextAppearance:设置开关的文字外观,暂时没发现有什么用…
android:textOff:按钮没有被选中时显示的文字
android:textOn:按钮被选中时显示的文字
android:textStyle:文字风格,粗体,斜体写划线那些
android:track:底部的图片
android:thumb:滑块的图片
android:typeface:设置字体,默认支持这三种:sans, serif, monospace;除此以外还可以使用
其他字体文件(*.ttf),首先要将字体文件保存在assets/fonts/目录下,不过需要在Java代码中设置:
**Typeface typeFace =Typeface.createFromAsset(getAssets(),”fonts/HandmadeTypewriter.ttf”);
textView.setTypeface(typeFace);
在代码中也可以改变该组件的外观:
setSwitchTextAppearance(Context context, int resid) 使用指定的资源id设置状态标签上的文字大小,类型,颜色等;
setSwitchTypeface(Typeface tf, int style) 使用指定的字体类型库内的指定类型来设置状态标签上的文字;
setSwitchTypeface(Typeface tf) 使用指定字体类型库内的固有类型来设置状态标签上的文字;
setTextOff(CharSequence textOff) 设置“关闭”状态标签文字;
setTextOn(CharSequence textOn) 设置“开启”状体标签文字;
父类内的setButtonDrawable(int resid) 用指定的资源id设置组件背景;
父类内的setButtonDrawable(Drawable d) 用可绘制对象设置组件背景;
android:textStyle 和android:typeface 与setSwitchTypeface(Typeface tf)对应;
2.3 使用示例
2.3.1 示例1
效果图:
<Switch
android:layout_marginRight="@dimen/dp_16"
android:layout_centerVertical="true"
android:layout_alignParentRight="true"
android:thumb="@drawable/shape_thumb"
android:track="@drawable/shape_track"
android:layout_width="wrap_content"
android:layout_height="@dimen/dp_10"/>
shape_thumb:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<size android:height="20dp" android:width="20dp"/>
<!-- 圆角弧度 20 -->
<corners android:radius="5dp"/>
<solid android:color="#ffffff" />
<stroke android:width="1dp"
android:color="#4AA361"/>
</shape>
shape_track:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<!-- 这个基本没有用-->
<size android:height="15dp" android:width="30dp"/>
<!-- 圆角弧度 20 -->
<corners android:radius="20dp"/>
<solid android:color="#4AA361" />
</shape>
2.3.2 示例2
因为比较简单,所以我们把他们写到一起,另外,我们为Switch设置下滑块和底部的图片,实现一个类似于IOS 7的滑块的效果,但是有个缺点就是不能在XML中对滑块和底部的大小进行设置,就是素材多大,Switch就会多大,我们可以在Java中获得Drawable对象,然后对大小进行修改,简单的例子:
实现代码:
先是两个drawable的文件:
thumb_selctor.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/switch_btn_pressed"/>
<item android:state_pressed="false" android:drawable="@drawable/switch_btn_normal"/>
</selector>
track_selctor.xml:
<?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_btn_bg_green"/>
<item android:state_checked="false" android:drawable="@drawable/switch_btn_bg_white"/>
</selector>
布局文件:activity_main.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<ToggleButton
android:id="@+id/tbtn_open"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checked="true"
android:textOff="关闭声音"
android:textOn="打开声音" />
<Switch
android:id="@+id/swh_status"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textOff=""
android:textOn=""
android:thumb="@drawable/thumb_selctor"
android:track="@drawable/track_selctor" />
</LinearLayout>
MainActivity.java:
public class MainActivity extends AppCompatActivity implements CompoundButton.OnCheckedChangeListener{
private ToggleButton tbtn_open;
private Switch swh_status;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tbtn_open = (ToggleButton) findViewById(R.id.tbtn_open);
swh_status = (Switch) findViewById(R.id.swh_status);
tbtn_open.setOnCheckedChangeListener(this);
swh_status.setOnCheckedChangeListener(this);
}
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
switch (compoundButton.getId()){
case R.id.tbtn_open:
if(compoundButton.isChecked()) Toast.makeText(this,"打开声音",Toast.LENGTH_SHORT).show();
else Toast.makeText(this,"打开声音",Toast.LENGTH_SHORT).show();
break;
case R.id.swh_status:
if(compoundButton.isChecked()) Toast.makeText(this,"开关:ON",Toast.LENGTH_SHORT).show();
else Toast.makeText(this,"开关:OFF",Toast.LENGTH_SHORT).show();
break;
}
}
}
Android 基础知识4-3.6 ToggleButton(开关按钮)Switch(开关)详解相关推荐
- Android 基础知识4-3.8 SeekBar(拖动条)详解
一.简介 拖动条类似进度条,不同的是用户可以控制,比如,应用程序中用户可以对音效进行控制,这就可以使用拖动条来实现.由于拖动条可以被用户控制,所以需要对其进行事件监听,这就需要实现SeekBar.on ...
- Android 基础知识4-2.11 AbsoluteLayout(绝对布局)详解
一.引言 Android中的五大布局,在本节中会讲解第六个布局AbsoluteLayout(绝对布局),之所以把这个放到最后,是因为AbsoluteLayout(绝对布局)我们基本上都是不会使用.当然 ...
- Android 基础知识4-2.8 TableLayout(表格布局)详解
一.TableLayout的概述 表格布局是以行数和列数来确定位置进行排列.就像一间教室,确定好行数与列数就能让同学有序入座. 注意:我们需要先添加<TableRow容器,每添加一个就会多一行, ...
- Android基础入门教程——2.3.1 TextView(文本框)详解
Android基础入门教程--2.3.1 TextView(文本框)详解 标签(空格分隔): Android基础入门教程 本节引言: 学习完Android中的六大布局,从本节开始我们来一个个讲解And ...
- 【基础知识】深度学习中各种归一化方式详解
本文转载自 https://blog.csdn.net/qq_23981335/article/details/106572171 仅作记录学习~ 总结 BN,LN,IN,GN,WS 从学术上解释差异 ...
- 诚之和:Java基础知识枚举Enum类介绍以及案例使用详解
Java语言中的数据类型可以分为两大类,分别是基本数据类型和引用数据类型.本篇文章要介绍的枚举,就是属于Java的引用数据类型.下面,将为大家详细介绍Java中的枚举,以及具体的使用案例. 一.文章序 ...
- 【音视频第6天】基础知识-移动端实时音视频直播技术详解和开源工程WebRTC的技术原理和使用浅析
本文是系列文章中的第1篇,本系列文章的大纲如下: <移动端实时音视频直播技术详解(一):开篇> <移动端实时音视频直播技术详解(二):采集> <移动端实时音视频直播技术详 ...
- Android基础知识——完善
首页 下载App × Android基础知识--完善 布鲁马 2016.05.17 10:29* 字数 5478 阅读 2672评论 1喜欢 38 疯狂Android摘要,Android基础知识好乱好 ...
- Android基础知识:在UI线程中运行代码
本文翻译自:Android basics: running code in the UI thread In the viewpoint of running code in the UI threa ...
最新文章
- Android获取手机内部存储和外部存储
- 机器学习实战的P264中代码对应的公式推导
- 331页!2021年的精华尽在这本数据库技术年刊
- Linux下导入SQL文件
- Element-ui中table使用row-class-name无效的锅
- js实现全排列组合算法
- python调用woff_修改Python脚本以批量转换目录中的所有“WOFF”文件
- 深度学习的权重衰减是什么_深度学习-权重衰减
- 百分百解决python manage.py makemigrations没有反应
- c语言中大写a对应的数字,123456789a
- 2020 Stibo Systems全球事业部新财年启动大会胜利召开
- mybatis 不确定结果集集_集集丨与小直男的日常(三)
- 执行Transact-SQL语句或批处理时发生异常
- 非关系型数据库NoSQL的崛起
- 【亲测有用】腾讯会议共享PPT,并开启演讲者模式
- 笔记本无线连接打印机
- iphone 3.1.2开发环境搭建——linux平台
- unicode 中日韩统一表意文字 java正则表达式
- java租车系统_Java 哒哒租车系统(控制台)
- 可擦写光盘不能擦除和刻写_什么是可擦写光盘 什么时候要用到可擦洗光盘(擦除光盘)...
热门文章
- 分享篇 | MySQL的ibdata1是个啥,为啥越来越大,怎么缩小?
- 删除文件提示:正在准备 再循环
- plpython 中文分词Windows 版
- WebGL—实现使用FBO离屏渲染(亦同拷贝纹理)off-screen rendering的两种方式
- 力推刷脸社交产品“Real如我” 阿里的社交梦靠谱吗?
- 文件批量重命名去掉前缀
- 将字符串转化为指定长度的字符串
- dockerfile案列详解
- 梦幻西游服务器维护不完了,梦幻西游:师门收服的时候服务器维护了,能一直等到维护结束吗?...
- 叮咚音箱 服务器挂了吗 无法注册,叮咚音箱连不上网怎么解决