Освой Android играючи
/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000
Компонент TimePicker позволяет пользователю выбрать время (часы, минуты). Данный виджет используют как правило на отдельном экране. Также существует похожее по функционалу диалоговое окно TimePickerDialog.
TimePicker находился в разделе Date & Time в Android Studio 3.01. Сейчас на панели инструментов данного компонента нет, поэтому придётся добавлять вручную.
Добавим на экран текстовую метку, кнопку и компонент времени:
<?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"
android:tag="ww" >
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Время"
android:textAppearance="?android:attr/textAppearanceLarge" />
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Который час?" />
<TimePicker
android:id="@+id/timePicker"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
Пользователь может выбрать любое время на компонент, а обычный щелчок на кнопке позволит отобразить выбранное время в текстовой метке при помощи методов getHour()/getCurrentHour()) (устар. и getMinute()/getCurrentMinute() (устар.). Изменение времени можно наблюдать через слушатель OnTimeChangedListener(). Напишем пример, где программно установим время, будем отслеживать изменение времени пользователем и получать установленное время через нажатие кнопки.
package ru.alexanderklimov.timepickerdemo;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.Toast;
import java.util.Calendar;
public class MainActivity extends AppCompatActivity {
private TextView mInfoTextView;
private TimePicker mTimePicker;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mInfoTextView = findViewById(R.id.textView);
mTimePicker = findViewById(R.id.timePicker);
Calendar now = Calendar.getInstance();
mTimePicker.setCurrentHour(now.get(Calendar.HOUR_OF_DAY));
mTimePicker.setCurrentMinute(now.get(Calendar.MINUTE));
mTimePicker.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() {
@Override
public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
Toast.makeText(getApplicationContext(), "onTimeChanged",
Toast.LENGTH_SHORT).show();
mInfoTextView.setText("Часы: " + hourOfDay + "\n" + "Минуты: "
+ minute);
}
});
Button timeButton = findViewById(R.id.button);
timeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mInfoTextView.setText(new StringBuilder()
.append(mTimePicker.getCurrentHour()).append(".")
.append(mTimePicker.getCurrentMinute()));
}
});
}
}
Для установки и получения времени используются парные методы, которые использовались в примере:
TimePicker timePicker = (TimePicker)findViewByid(R.id.timePicker);
timePicker.setIs24HourView(true); // формат 24 часа
timePicker.setCurrentHour(new Integer(10)); // 10 часов
timePicker.setCurrentMinute(new Integer(22)); // 22 минуты
В API 23 методы признаны устаревшими и вместо них теперь используются аналогичные методы без слова Current:
В Android 21 внешний вид компонента изменился.
Интересно, что ещё в августе 2013 года я написал статью на Хабре Выбираем время с помощью нового TimePickerDialog, где рассказывал о новом диалоговом окне и выражал надежду, что подобный функционал будет доступен из коробки. Мечты сбываются (с).
В 2021 году в составе библиотеки Material Design появился компонент MaterialTimePicker