一、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(开关)详解相关推荐

  1. Android 基础知识4-3.8 SeekBar(拖动条)详解

    一.简介 拖动条类似进度条,不同的是用户可以控制,比如,应用程序中用户可以对音效进行控制,这就可以使用拖动条来实现.由于拖动条可以被用户控制,所以需要对其进行事件监听,这就需要实现SeekBar.on ...

  2. Android 基础知识4-2.11 AbsoluteLayout(绝对布局)详解

    一.引言 Android中的五大布局,在本节中会讲解第六个布局AbsoluteLayout(绝对布局),之所以把这个放到最后,是因为AbsoluteLayout(绝对布局)我们基本上都是不会使用.当然 ...

  3. Android 基础知识4-2.8 TableLayout(表格布局)详解

    一.TableLayout的概述 表格布局是以行数和列数来确定位置进行排列.就像一间教室,确定好行数与列数就能让同学有序入座. 注意:我们需要先添加<TableRow容器,每添加一个就会多一行, ...

  4. Android基础入门教程——2.3.1 TextView(文本框)详解

    Android基础入门教程--2.3.1 TextView(文本框)详解 标签(空格分隔): Android基础入门教程 本节引言: 学习完Android中的六大布局,从本节开始我们来一个个讲解And ...

  5. 【基础知识】深度学习中各种归一化方式详解

    本文转载自 https://blog.csdn.net/qq_23981335/article/details/106572171 仅作记录学习~ 总结 BN,LN,IN,GN,WS 从学术上解释差异 ...

  6. 诚之和:Java基础知识枚举Enum类介绍以及案例使用详解

    Java语言中的数据类型可以分为两大类,分别是基本数据类型和引用数据类型.本篇文章要介绍的枚举,就是属于Java的引用数据类型.下面,将为大家详细介绍Java中的枚举,以及具体的使用案例. 一.文章序 ...

  7. 【音视频第6天】基础知识-移动端实时音视频直播技术详解和开源工程WebRTC的技术原理和使用浅析

    本文是系列文章中的第1篇,本系列文章的大纲如下: <移动端实时音视频直播技术详解(一):开篇> <移动端实时音视频直播技术详解(二):采集> <移动端实时音视频直播技术详 ...

  8. Android基础知识——完善

    首页 下载App × Android基础知识--完善 布鲁马 2016.05.17 10:29* 字数 5478 阅读 2672评论 1喜欢 38 疯狂Android摘要,Android基础知识好乱好 ...

  9. Android基础知识:在UI线程中运行代码

    本文翻译自:Android basics: running code in the UI thread In the viewpoint of running code in the UI threa ...

最新文章

  1. Android获取手机内部存储和外部存储
  2. 机器学习实战的P264中代码对应的公式推导
  3. 331页!2021年的精华尽在这本数据库技术年刊
  4. Linux下导入SQL文件
  5. Element-ui中table使用row-class-name无效的锅
  6. js实现全排列组合算法
  7. python调用woff_修改Python脚本以批量转换目录中的所有“WOFF”文件
  8. 深度学习的权重衰减是什么_深度学习-权重衰减
  9. 百分百解决python manage.py makemigrations没有反应
  10. c语言中大写a对应的数字,123456789a
  11. 2020 Stibo Systems全球事业部新财年启动大会胜利召开
  12. mybatis 不确定结果集集_集集丨与小直男的日常(三)
  13. 执行Transact-SQL语句或批处理时发生异常
  14. 非关系型数据库NoSQL的崛起
  15. 【亲测有用】腾讯会议共享PPT,并开启演讲者模式
  16. 笔记本无线连接打印机
  17. iphone 3.1.2开发环境搭建——linux平台
  18. unicode 中日韩统一表意文字 java正则表达式
  19. java租车系统_Java 哒哒租车系统(控制台)
  20. 可擦写光盘不能擦除和刻写_什么是可擦写光盘 什么时候要用到可擦洗光盘(擦除光盘)...

热门文章

  1. 分享篇 | MySQL的ibdata1是个啥,为啥越来越大,怎么缩小?
  2. 删除文件提示:正在准备 再循环
  3. plpython 中文分词Windows 版
  4. WebGL—实现使用FBO离屏渲染(亦同拷贝纹理)off-screen rendering的两种方式
  5. 力推刷脸社交产品“Real如我” 阿里的社交梦靠谱吗?
  6. 文件批量重命名去掉前缀
  7. 将字符串转化为指定长度的字符串
  8. dockerfile案列详解
  9. 梦幻西游服务器维护不完了,梦幻西游:师门收服的时候服务器维护了,能一直等到维护结束吗?...
  10. 叮咚音箱 服务器挂了吗 无法注册,叮咚音箱连不上网怎么解决