Освой Android играючи
/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000
Обновлено: 23 мая 2023
Компонент TimePicker позволяет пользователю выбрать время (часы, минуты). Данный виджет используют как правило на отдельном экране. Также существует похожее по функционалу диалоговое окно TimePickerDialog.
TimePicker раньше находился в разделе Date & Time в Android Studio 3.01. Сейчас на панели инструментов данного компонента нет, поэтому придётся добавлять вручную.
В Android 5 (API 21) внешний вид компонента изменился.
Добавим на экран текстовую метку и компонент выбора времени:
<?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:orientation="vertical">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Время"
android:textAppearance="?android:attr/textAppearanceLarge" />
<TimePicker
android:id="@+id/timePicker"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
Пользователь может выбрать любое время на компоненте. Изменение времени можно наблюдать через слушатель OnTimeChangedListener(). Напишем пример, где программно установим время, будем отслеживать изменение времени пользователем и получать установленное время через нажатие кнопки.
package ru.alexanderklimov.timepickerdemo
import android.os.Bundle
import android.widget.TextView
import android.widget.TimePicker
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import java.util.Calendar
class MainActivity : AppCompatActivity() {
private lateinit var timePicker: TimePicker
private lateinit var infoTextView: TextView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
timePicker = findViewById(R.id.timePicker)
infoTextView = findViewById(R.id.textView)
val now = Calendar.getInstance()
timePicker.hour = now.get(Calendar.HOUR_OF_DAY)
timePicker.minute = now.get(Calendar.MINUTE)
timePicker.setOnTimeChangedListener { _, hourOfDay, minute ->
Toast.makeText(
applicationContext, "onTimeChanged",
Toast.LENGTH_SHORT
).show()
infoTextView.text = "$hourOfDay:$minute"
}
}
}
В API 23 часть методов была признана устаревшими и вместо них теперь используются новые методы без слова Current:
Новый внешний вид в Android 5 Lollipop (API 21)
Так выглядит на Android 6.
Так выглядел компонент раньше.
Интересно, что ещё в августе 2013 года я написал статью на Хабре Выбираем время с помощью нового TimePickerDialog, где рассказывал о новом диалоговом окне и выражал надежду, что подобный функционал будет доступен из коробки. Мечты сбываются (с).
В 2021 году в составе библиотеки Material Design появился компонент MaterialTimePicker