Buttonの一種でToggleButton(トグルボタン)というのがあります。
ユーザーに視覚的にON/OFFをわかり易くするために使えます
Android Studio
2024.1.1
2024.1.1
ToggleButton
基本的にButtonを継承しているので使い方としてはユーザーのタップを受け付けて何かするという形になります
java.lang.Object | |||||
↳ | android.view.View | ||||
↳ | android.widget.TextView | ||||
↳ | android.widget.Button | ||||
↳ | android.widget.CompoundButton | ||||
↳ | android.widget.ToggleButton |
ToggleButtonを色々スタイルを変えてカスタマイズ,etc. 結局これってButtonのカスタマイズ?となるので、あるがままで使って行った方がいいのかもしれません
DesignのPaletteからToggleButtonを選んで簡単に設置できます
シンプルな設定
ToggleButtonではクリックで表示文字とアンダーバーカラーが変わるようにデフォルトで設定されています
こちらに、切り替えボタン の基本的な使い方がありますが、Buttonと同様にクリックをリスナーで受け取るようになっています
1 2 3 4 5 6 7 8 |
val toggle: ToggleButton = findViewById(R.id.togglebutton) toggle.setOnCheckedChangeListener { _, isChecked -> if (isChecked) { // The toggle is enabled } else { // The toggle is disabled } } |
TggleButtonとして使いやすいプロパティが用意されています
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
getTextOn() // ONのときに表示するメッセージを取得 getTextOff() // OFFのときに表示するメッセージを取得 setBackground(android.graphics.drawable.Drawable) // ボタンに背景画像を指定する。 setChecked(boolean checked) // ToggleButtonの状態ON/OFFを設定する setTextOn(CharSequence textOn) // ON状態のときにボタン上に表示するテキストを指定する。 setTextOff(CharSequence textOff) // OFFのときにボタン上に表示するテキストを指定する。 |
サンプルコード
ToggleButtonを2つおいてそれぞれ切り替えてみましょう
MainActivity.kt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
//package com.example.kotlintogglebutton import android.os.Bundle import androidx.activity.enableEdgeToEdge import androidx.appcompat.app.AppCompatActivity import androidx.core.view.ViewCompat import androidx.core.view.WindowInsetsCompat import com.example.kotlintogglebutton.databinding.ActivityMainBinding class MainActivity : AppCompatActivity() { private lateinit var binding: ActivityMainBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) enableEdgeToEdge() binding = ActivityMainBinding.inflate(layoutInflater) setContentView(binding.root) ViewCompat.setOnApplyWindowInsetsListener(binding.root) { v, insets -> val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()) v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom) insets } binding.toggle1.setOnCheckedChangeListener { _, isChecked -> if (isChecked) { binding.textview.setText(R.string.enable1) } else { binding.textview.setText(R.string.disable1) } } binding.toggle2.setOnCheckedChangeListener { _, isChecked -> if (isChecked) { binding.textview.setText(R.string.enable2) } else { binding.textview.setText(R.string.disable2) } } } } |
activity_main.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <TextView android:id="@+id/textview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="20sp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="0.3" /> <ToggleButton android:id="@+id/toggle1" android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.3" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="0.5" /> <ToggleButton android:id="@+id/toggle2" android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.7" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="0.5" /> </androidx.constraintlayout.widget.ConstraintLayout> |
strings.xml
1 2 3 4 5 6 7 |
<resources> <string name="app_name">KotlinToggleButton</string> <string name="enable1">ToggleButton1: Enabled</string> <string name="disable1">ToggleButton1: Disable</string> <string name="enable2">ToggleButton2: Enabled</string> <string name="disable2">ToggleButton2: Disable</string> </resources> |
build.gradle
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
android{ compileSdk ... defaultConfig { ... } buildTypes { release { ... } } compileOptions { ... } kotlinOptions { ... } buildFeatures { viewBinding = true } } ... |
以上で実行してみましょう
References:
切り替えボタン | Android デベロッパー
ToggleButton