WEBサイト制作・アプリ開発・システム開発・ブランディングデザイン制作に関するご相談はお気軽にご連絡ください。
構想段階からじっくりとヒアリングし、お客様の課題にあわせたアプローチ手法でお客様の“欲しかった”をカタチにしてご提案いたします。
Blog スタッフブログ
Android
システム開発
[Android][Kotlin]複数の数字選択ダイアログの表示と数字の刻みの設定
システム開発担当のTFです。
※Android10対応(他バージョンの場合、細かい部分等が異なる事があります)
やり方
- 複数の数字選択ダイアログのレイアウトの作成
- レイアウトのviewを作成する
- viewから、NumberPickerを取得し、数字の刻みをセットする
- AlertDialogにviewをセットし表示する
参考
【Kotlin】NumberPickerを使用したダイアログの実装
Kotlinで文字列を選択できるドラムロールをシンプルに実装
NumberPickerを使って数字選択ダイアログを実装してみる
android – フラグメント内にNumberPickerを含むalertDialogを表示する方法は?
NumberPickerの5つ刻みなどに変更する
NumberPicker(ドラムロール)に任意の文字列を入れる方法と、値の取得
サンプル
<?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"
>
<!-- 分 用のNumberPicker -->
<NumberPicker
android:id="@+id/minuteNumberPicker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toLeftOf="@id/textView"
app:layout_constraintTop_toTopOf="parent"
>
</NumberPicker>
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=":"
android:textColor="@color/black"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<!-- 秒 用のNumberPicker -->
<NumberPicker
android:id="@+id/secondNumberPicker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toRightOf="@id/textView"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
>
</NumberPicker>
</androidx.constraintlayout.widget.ConstraintLayout>
// 複数の数字選択ダイアログのレイアウトの取得
var view = layoutInflater.inflate(R.layout.dialog_timestamp, null)
// 分 用のNumberPickerの取得
var minuteNumberPicker = view.findViewById<NumberPicker>(R.id.minuteNumberPicker)
// 0 から 59 まで セット
minuteNumberPicker.maxValue = 59
minuteNumberPicker.minValue = 0
// 秒 用のNumberPickerの取得
var secondNumberPicker = view.findViewById<NumberPicker>(R.id.secondNumberPicker)
// 10秒刻みで表示セット
secondNumberPicker.displayedValues = arrayOf("00","10","20","30","40","50")
// 添え字となるため、 maxValue は5となる
secondNumberPicker.maxValue = 5
secondNumberPicker.minValue = 0
// ダイアログの設定
val builder: AlertDialog.Builder = AlertDialog.Builder(this)
// 作成したviewをセットする
builder.setView(view)
builder.setPositiveButton("OK",
DialogInterface.OnClickListener { dialog, which ->
runOnUiThread {
// 選択された値を取得し文字列を textView.text にセットする
textView.text = String.format("%d:%02d", minuteNumberPicker.value, secondNumberPicker.value*10)
}
})
builder.setNegativeButton("CANCEL",
DialogInterface.OnClickListener { dialog, which ->
dialog.dismiss()
})
builder.show()