Виджет выбора времени TimePicker

| 07.08.2014

В этом уроке мы рассмотрим работу с виджетом для выбора времени TimePicker. Здесь нет ничего сложного, и все напоминает создание диалогов типа DialogFragment. В приложении мы создадим простой layout с одним элементом TextView и кнопкой Button. При клике по кнопке будет появляться диалоговое окно с выбором времени TimePicker. После выбора и закрытия окна выбранное время будет добавлено в TextView.

Первоначальный макет будет выглядеть так:

Виджет выбора времени TimePicker

Код layout-a res/layout/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
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context=".MainActivity">
 
    <TextView
        android:text="@string/app_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/tv" />
 
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="New Button"
        android:id="@+id/button"
        android:layout_below="@+id/tv"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginTop="116dp"
        android:onClick="onClick"/>
 
</RelativeLayout>

Добавим строковые ресурсы — res/values/strings.xml

1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="app_name">TimePick</string>
    <string name="choose_time">Выберите время</string>
    <string name="ready">Готово</string>
    <string name="hours">Часы </string>
    <string name="minutes">Минуты: </string>
</resources>

Создадим класс фрагмента, экземпляр которого мы потом будем создавать из MainActivity.java

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
44
45
46
47
48
49
50
<strong>TimePickFragment.java</strong>
 
package ru.androiddocs.timepick;
 
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.TimePickerDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.widget.Button;
import android.widget.TextView;
import android.widget.TimePicker;
 
import java.util.Calendar;
 
public class TimePickFragment extends DialogFragment
        implements TimePickerDialog.OnTimeSetListener {
 
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // устанавливаем текущее время для TimePicker
        final Calendar c = Calendar.getInstance();
        int hour = c.get(Calendar.HOUR_OF_DAY);
        int minute = c.get(Calendar.MINUTE);
 
        // создаем TimePickerDialog и возвращаем его
        Dialog picker = new TimePickerDialog(getActivity(), this, hour, minute, true);
        picker.setTitle(getResources().getString(R.string.choose_time));
 
        return picker;
    }
 
    @Override
    public void onStart() {
        super.onStart();
        // добавляем кастомный текст для кнопки
        Button nButton =  ((AlertDialog) getDialog()).getButton(DialogInterface.BUTTON_POSITIVE);
        nButton.setText(getResources().getString(R.string.ready));
 
    }
    @Override
    public void onTimeSet(TimePicker view, int hours, int minute) {
        // Выводим выбранное время
        TextView tv = (TextView) getActivity().findViewById(R.id.tv);
        tv.setText(getResources().getString(R.string.hours) + hours
                + getResources().getString(R.string.minutes) + minute);
    }
 
}

Тут всего три метода. В onCreateDialog() мы получаем данные о текущем времени (часы и минуты). Затем вызываем конструктор TimePickerDialog, передавая в параметрах контекст, оформление (текущая тема), часы, минуты и флаг true для установки 24-часового формата. Устанавливаем заголовок для диалога и возвращаем объект.

В методе onStart() мы добавляем кастомный текст для кнопки «Готово».

Метод onTimeSet() — это обработчик, который получает выбранное время. Мы добавляем время в TextView.

Нам осталось добавить главное активити — MainActivity.java:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package ru.androiddocs.timepick;
 
import android.support.v4.app.DialogFragment;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.View;
 
 
public class MainActivity extends ActionBarActivity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
 
    public void onClick(View v) {
        DialogFragment newFragment = new TimePickFragment();
        newFragment.show(getSupportFragmentManager(), "timePicker");
    }
}

Метод onClick() срабатывает при нажатии кнопки в layout-e. Здесь создается экземпляр TimePickFragment и затем запускается отображение диалога.

Виджет выбора времени TimePicker

Виджет выбора времени TimePicker

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*