Освой Android играючи

Сайт Александра Климова

Шкодим

/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000

TimePicker

Компонент 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

Методы

Для установки и получения времени используются парные методы, которые использовались в примере:

  • setIs24HourView()
  • setCurrentHour()/getCurrentHour()
  • setCurrentMinute()/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:

  • int getHour()
  • int getMinute()
  • void setHour(int)
  • void setMinute(int)

Новый внешний вид в Android 21 Lollipop

В Android 21 внешний вид компонента изменился.

TimePicker

Интересно, что ещё в августе 2013 года я написал статью на Хабре Выбираем время с помощью нового TimePickerDialog, где рассказывал о новом диалоговом окне и выражал надежду, что подобный функционал будет доступен из коробки. Мечты сбываются (с).

В 2021 году в составе библиотеки Material Design появился компонент MaterialTimePicker

Реклама