In this tutorial, we’ll learn how to implement Android ToggleButton using Kotlin. We will learn how to create custom toggle buttons and how do they work.

在本教程中,我们将学习如何使用Kotlin实现Android ToggleButton。 我们将学习如何创建自定义切换按钮以及它们如何工作。

什么是Android ToggleButton? (What is Android ToggleButton?)

Android ToggleButton widget is used to toggle the state of the Button(checked/unchecked).

Android ToggleButton小部件用于切换Button的状态(选中/未选中)。

ToggleButton和RadioButton之间的区别 (Difference between ToggleButton and RadioButton)

A RadioButton cannot change the state once it’s clicked unless it’s present in a RadioGroup.

单击RadioButton不能更改状态,除非它存在于RadioGroup中。

A ToggleButton is closer to a Switch Widget that is available with Material Design.

ToggleButton靠近Material Design随附的Switch Widget 。

ToggleButton和Switch之间的区别 (Difference between ToggleButton and Switch)

The Switch Widget has a slider control while the ToggleButton does not have it.

开关小部件具有滑块控件,而ToggleButton没有。

ToggleButton属性 (ToggleButton Attributes)

ToggleButton extends the Button class. It inherits most of the Button attributes such as android:text, android:drawableRight, android:textAllCaps, and android:background.

ToggleButton扩展了Button类。 它继承了大多数Button属性,例如android:textandroid:drawableRightandroid:textAllCapsandroid:background

Some of the important ToggleButton attributes are:

一些重要的ToggleButton属性是:

  • android:textOnandroid:textOn
  • android:textOffandroid:textOff
  • android:disableAlphaandroid:disableAlpha
  • android:checkedandroid:选中

在XML中定义切换按钮 (Defining a Toggle Button in XML)

<ToggleButtonandroid:id="@+id/toggleButton2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textOff="NIGHT"android:checked="true"android:textOn="DAY" />

By default Toggle button:

默认情况下,切换按钮:

  • checked attribute is falsechecked属性为假
  • textOff attribute is OFFtextOff属性为OFF
  • textOn attribute is ONtextOn属性为ON
  • The indicator color is colorAccent that’s defined in the styles.xml file.指示器颜色是在styles.xml文件中定义的colorAccent

使用Kotlin以编程方式创建ToggleButton (Creating ToggleButton Programmatically using Kotlin)

val toggleButton = ToggleButton(this)
toggleButton.textOff = "ABC"
toggleButton.textOn = "DEF"
toggleButton.isChecked = true

The textOn, textOff, and isChecked properties behave as getter and setter methods.

textOn,textOff和isChecked属性的行为与getter和setter方法相同。

在ToggleButton上设置侦听器 (Setting a Listener on the ToggleButton)

We have to implement CompoundButton.OnCheckedChangeListener interface callback method to invoke it when the ToggleButton is selected.

当选择ToggleButton时,我们必须实现CompoundButton.OnCheckedChangeListener接口回调方法来调用它。

There are following listener methods for ToggleButton.

ToggleButton有以下侦听器方法。

Android ToggleButton Kotlin示例项目 (Android ToggleButton Kotlin Example Project)

We’ve created two drawables using Vector Assets in our drawable directory. The toggle_drawable.xml acts as the background selector. It will set the appropriate background according to the state of the toggle button.

我们在drawable目录中使用Vector Assets创建了两个drawable。 toggle_drawable.xml用作背景选择器。 它将根据切换按钮的状态设置适当的背景。

ToggleButton Kotlin代码 (ToggleButton Kotlin Code)

The code for the background selector toggle_drawable.xml is given below.

下面给出了背景选择器toggle_drawable.xml的代码。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"><item android:drawable = "@drawable/ic_bookmark_black"android:state_checked="true"/><item android:drawable="@drawable/ic_bookmark_border"android:state_checked="false"/>
</selector>

It’ll show the relevant image on the ToggleButton based on the state – checked/unchecked.

它将根据状态-选中/未选中在ToggleButton上显示相关图像。

The code for the activity_main.xml layout file is given below.

下面给出了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:gravity="center"android:orientation="vertical"><ToggleButtonandroid:id="@+id/toggleButton1"android:layout_width="wrap_content"android:layout_height="wrap_content" /><ToggleButtonandroid:id="@+id/toggleButton2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textOff="NIGHT"android:textOn="DAY" /><ToggleButtonandroid:id="@+id/toggleButtonDrawable"android:layout_width="100dp"android:layout_height="100dp"android:background="@drawable/toggle_drawable"android:checked="true"android:textOff=""android:textOn="" /></LinearLayout>

We have to set empty field explicitly in textOn and textOff otherwise they’ll show default values.

我们必须在textOn和textOff中显式设置空字段,否则它们将显示默认值。

The code for the MainActivity.kt class is given below.

MainActivity.kt类的代码如下。

package net.androidy.androidlytogglebuttonimport android.content.Context
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.widget.CompoundButton
import android.widget.Toast
import kotlinx.android.synthetic.main.activity_main.*class MainActivity : AppCompatActivity(), CompoundButton.OnCheckedChangeListener {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)toggleButton1.setOnCheckedChangeListener(this)toggleButton2.setOnCheckedChangeListener(this)toggleButtonDrawable.setOnCheckedChangeListener(this)}override fun onCheckedChanged(p0: CompoundButton?, p1: Boolean) {when (p0?.id) {R.id.toggleButtonDrawable -> displayToast(message = "Toggle Button Drawable State is Filled? $p1")else -> displayToast(message = "Toggle Button State is checked? $p1")}}fun displayToast(context: Context = this, message: String, duration: Int = Toast.LENGTH_SHORT) {Toast.makeText(context, message, duration).show()}
}

We are implementing CompundButton.OnCheckedChangeListener interface. We are overriding the onCheckChanged function in our Kotlin class.

我们正在实现CompundButton.OnCheckedChangeListener接口。 我们将覆盖Kotlin类中的onCheckChanged函数。

Thanks to android kotlin extensions, we don’t have to use findViewById to get the xml widgets in our Activity class.

感谢android kotlin扩展,我们不必使用findViewById即可在Activity类中获取xml小部件。

Inside the onCheckChanged function, we’ve used “when statement” to display a Toast message showing whether the Button was checked/unchecked.

在onCheckChanged函数内部,我们使用了“ when语句”来显示Toast消息 ,该消息显示按钮是否已选中/未选中。

Kotlin Functions allow us to set default values for the parameters.

Kotlin函数允许我们设置参数的默认值。

自定义切换按钮 (Custom ToggleButton)

We can set styles on our ToggleButton inside the styles.xml file.

我们可以在styles.xml文件中的ToggleButton上设置样式。

<style name="AppTheme.ToggleButton" parent="Base.Widget.AppCompat.Button"><item name="colorButtonNormal">@color/colorPrimaryDark</item><item name="android:textColor">@android:color/white</item><item name="colorAccent">@android:color/holo_purple</item></style>

To set the custom style on our ToggleButton:

在我们的ToggleButton上设置自定义样式:

<ToggleButtonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:theme="@style/AppTheme.ToggleButton" />

Custom Toggle Button Output:

自定义切换按钮输出:

AndroidlyToggleButtonAndroidlyToggleButton

翻译自: https://www.journaldev.com/168/android-togglebutton-kotlin

使用Kotlin的Android ToggleButton相关推荐

  1. 用Kotlin写Android Gradle脚本

    Android应用开发中,离不开Gradle脚本的构建.大部分Android开发同学忽视了脚本的力量,甚至有很大一部分同学不知道Gradle脚本是什么,用什么语言编写的:当然,也有相当一部分同学知道G ...

  2. Kotlin for Android

    在Google IO 2017 大会上,Google将 Kotlin列为 Android官方开发语言,Android Studio 3.0 也默认集成了Kotlin插件. Android Studio ...

  3. 如果你现在学Android---学习使用Kotlin进行Android开发

    原文地址: http://www.eoeandroid.com/thread-902176-1-1.html?_dsign=650ea146 之前写了一篇<如果你现在学Android–写给新手的 ...

  4. 用Kotlin开发android平台语音识别语义理解应用

    用Kotlin开发android平台语音识别,语义理解应用(olamisdk) 转载请注明CSDN博文地址:http://blog.csdn.net/ls0609/article/details/75 ...

  5. Kotlin on Android 开发环境介绍

    Kotlin 被 Google 采纳为 Android 开发一级编程语言,到现在也一年多了,我们团队从去年 10 月份开始部分项目尝试用 Kotlin 开发,到现在决定推广到全部项目,因为一旦用上 K ...

  6. 用Kotlin开发android平台语音识别,语义理解应用(olamisdk)

    本文使用Kotlin开发Android平台的一个语音识别方面的应用,用的是欧拉密开放平台olamisdk. 1.Kotlin简介 Kotlin是由JetBrains创建的基于JVM的编程语言,Inte ...

  7. Java vs Kotlin,Android开发人员应该选择哪种语言?

    自 Google 于 2017 年宣布 Kotlin 成为 Google IO 的 Android 开发官方语言以来,想要成为Android开发人员的程序员正陷入两难境地. 在讨论这个问题前,我首先要 ...

  8. 从零开始学android编程_小白也能学得会!谷歌推出免费的Kotlin和Android开发课程...

    程序员书库(ID:CodingBook) 猿妹编译 链接:https://android-developers.googleblog.com/2020/07/learn-android-and-kot ...

  9. 使用Kotlin开发Android应用 - 环境搭建 (1)

    一. 在Android Studio上安装Kotlin插件 按快捷键Command+, -> 在Preferences界面找到Plugins -> 点击Browse repositorie ...

最新文章

  1. 调用父级方法_通信:找到任意组件实例的findComponents系列方法,5个终极方案
  2. 每天一道LeetCode-----计算直方图中最大矩形的面积
  3. 20.IDA-修改二进制文件、显示修改点
  4. java的封装性的优点_18、Java的三大特性之封装
  5. 生产排期混乱、质量问题难定位?这套生产场景方案全解决,附模板
  6. 源码安装 MariaDB
  7. Python使用Queue对象实现多线程同步小案例
  8. 纸板怎么切割光滑_现有的切割机如何选择呢?进来看看就清楚了
  9. 纳什叫上林书豪,投了一家AI篮球训练公司
  10. dmg为什么下载成php,解答:dmg是什么意思,dmg文件如何打开,及怎么把dmg转换成iso
  11. 思科交换机配置命令大全
  12. maya python vrayies set ies file
  13. matlab乘除号怎么打,matlab中的乘除法
  14. 网络性能测试(系统层面、针对Linux、安卓)
  15. 蓝牙 UUID 解释
  16. 谷歌浏览器被2345主页强制绑定
  17. 增益控制AGC | 雷达接收机 | 原理描述
  18. 更新源linux命令,Linux更新源
  19. Spine导出设置和Bat一键批量导出
  20. 腾讯云服务器SSH远程登录

热门文章

  1. Eclipse启动莫名报错处理
  2. 为什么我比别人差这么多?
  3. [转载] Java 单例(Singleton)类
  4. [转载] java中final,finally,finalize三者的作用和区别
  5. Spring的数据库编程浅入浅出——不吹牛逼不装逼
  6. PHP curl函数制 exec_ch和get_headers
  7. struts2与spring集成时,关于class属性及成员bean自动注入的问题
  8. 脚本化CSS类-HTML5 classList属性
  9. (十二)通过Opencv blobFromImage实现数据标准化
  10. scale缩放中心_规范化(包含归一化)、标准化、中心化、BN、正则化的区别