Колесо выбора даты/времени Android

Как я могу добиться этого макета для выбора времени (а также для выбора даты)? Макет по умолчанию — это либо (очень большие) часы, либо (некрасивый) счетчик времени в стиле спиннера. Я видел это в нескольких приложениях, но не мог найти, как добиться такого внешнего вида.

введите здесь описание изображения


person Amos    schedule 06.04.2015    source источник
comment
вы можете проверить средство выбора времени в Android, вот несколько ссылок, просто проверьте tutorialspoint.com/android/android_timepicker_control. htm mkyong.com/android/android-time-picker- пример androidexample.com/   -  person Hanuman    schedule 06.04.2015
comment
tutorialspoint.com/android/android_timepicker_control.htm показывает схему выбора времени, которую я хочу, но она кажется, это средство выбора времени по умолчанию, хотя я не вижу этого в своем предварительном просмотре (используя последнюю версию API 22). Я вижу его как спиннер с кнопками вверх/вниз.   -  person Amos    schedule 06.04.2015


Ответы (5)


Для дальнейшего использования для всех, кому это может понадобиться, можно добиться этого счетчика выбора времени, просто выбрав TimePicker среди виджетов Android, а затем в файле xml введите android:timePickerMode="spinner".

XML-код вашего виджета должен выглядеть так:

<TimePicker
    android:id="@+id/timePicker"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:timePickerMode="spinner" />

Мой ответ был основан на документации.

person Rodrigo Borges    schedule 15.12.2017

На мой взгляд, самый простой способ добиться этого - начиная с уровня 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:gravity="center_horizontal"
    android:orientation="vertical"
    android:padding="8dp">

    <TimePicker
        android:id="@+id/timePicker"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:timePickerMode="spinner" />

    <DatePicker
        android:id="@+id/datePicker"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:calendarViewShown="false"
        android:datePickerMode="spinner" />

</LinearLayout>

Вы получаете это:

Пример выбора даты и времени

person madfree    schedule 28.09.2019

В этом примере есть три средства выбора: NumberPicker, DatePicker и TimerPicker.

https://github.com/rodrigobusata/android-pickers

or

Используйте только образец без библиотеки и переопределите средства выбора по умолчанию для Android.

person Busata    schedule 06.04.2015
comment
Спасибо. Что вы имеете в виду под «использовать только образец без библиотеки и переопределить средства выбора по умолчанию для Android»? - person Amos; 06.04.2015
comment
Пожалуйста. В этом примере есть образец, использующий библиотеку, которая переопределяет средства выбора по умолчанию для Android, чтобы можно было изменить цвета, но если вы хотите использовать средство выбора только с цветами по умолчанию, просмотрите только образец, который находится в папке приложения, и переопределите net.simonvt.timepicker. .TimePicker в TimePicker. - person Busata; 06.04.2015
comment
Насколько я понимаю, мне нужна реализация net.simonvt.datepicker.DatePicker (например), чтобы увидеть внешний вид, который я хочу, где я могу найти его, чтобы использовать его в своем коде? в ссылке я вижу только ссылку на него, но не фактическую реализацию, что мне не хватает? - person Amos; 06.04.2015
comment
В примере рядом с папкой приложения есть папки numberpicker-library, datepicker-libray и timerpicker-library. - person Busata; 06.04.2015
comment
Поэтому мне нужно взять исходники отсюда: github.com/rodrigobusata/android-pickers/tree/master/, и тогда я смогу использовать их в макете внутри своего приложения? - person Amos; 06.04.2015
comment
Вот и все! Удачи. - person Busata; 06.04.2015
comment
Странно, по-видимому, уродливый спиннер был только в превью, когда я действительно запускаю приложение, оно выглядит так, как я хочу. - person Amos; 06.04.2015
comment
Это потому, что в вашем превью может быть больше, чем в вашем эмуляторе. - person Busata; 06.04.2015
comment
я думаю ссылки уже нет - person Faisal Naseer; 15.07.2016

Обратите внимание, что этот диалог является фрагментом.

Тем не менее, основная идея будет заключаться в следующем: когда вам нужно запустить этот выбор даты, вы покажете этот фрагмент как наложение текущей активности. В этом фрагменте есть слушатель выбора даты: событие, которое запускается, когда пользователь выбирает дату. Хорошо, все просто, пока здесь. Сложнее всего будет понять последнее: взаимодействие между фрагментом и активностью. Зачем? Поскольку действие должно знать, какая дата была выбрана. Для этого фрагмент будет иметь общедоступный интерфейс, который будет реализован активностью.

Хорошо, давайте посмотрим код:

MyActivity.java

public class MyActivity extends FragmentActivity implements DatePickerFragment.FragmentInteraction{

    @Override
    public void onCreate(Bundle savedInstanceState){
        Button showDatePickerButton = (Button)findViewById(R.id.dateButton);
        showDatePickerButtonsetOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View arg0) {
                DialogFragment newFragment = new DatePickerFragment();
                newFragment.show(getSupportFragmentManager(), getString(R.string.datePickerTitle));
            }
        });
    }

    @Override
    public void doSomethingWithDate(int day, int month, int year) {
        Log.d("", "SELECTED DATE " + month + "/" + day  + "/" + year);
    }
}

DatePickerFragment.java

public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener{

    private FragmentInteraction mListener;

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        mListener = (FragmentInteraction) activity;
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        //Show picker with actual date presetted
        final Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH);
        int day = c.get(Calendar.DAY_OF_MONTH);

        // Create a new instance of DatePickerDialog and return it
        return new DatePickerDialog(getActivity(), this, year, month, day);
    }

    @Override
    public void onDateSet(DatePicker view, int anio, int mes, int dia) {
        mListener.doSomethingWithDate(dia, mes + 1, anio);
    }

    public interface FragmentInteraction{
        public void doSomethingWithDate(int dia, int mes, int anio);
    }
}
person Joaquin Iurchuk    schedule 06.04.2015
comment
Не уверен, что понял ваш ответ. Я хочу, чтобы компонент выбора времени/даты был помещен во фрагмент с другими компонентами, где пользователь может выбрать дату/время. Мой вопрос касался компоновки компонента выбора времени. - person Amos; 06.04.2015
comment
Просто используйте только класс DatePickerFragment и пропустите интерфейс - person Joaquin Iurchuk; 06.04.2015
comment
Значит, его нельзя использовать как простой объект/компонент/представление в макете вместе с другими объектами/компонентами/представлениями? например: средство выбора даты, текстовое представление и кнопка внутри одного и того же макета? - person Amos; 06.04.2015
comment
Да, конечно. Но это не простой компонент. Это компонент фрагмента - person Joaquin Iurchuk; 06.04.2015

Просто добавьте timepickermode в xml вот так <TimePicker android:id="@+id/time" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="10dp" android:gravity="center" android:timePickerMode="spinner" android:text="TimePicker" android:textSize="18sp" android:textColor="@android:color/black" android:textStyle="bold"/>

person Sameep Sharma - INFOCRATS    schedule 02.05.2019