Подтвердить что ты не робот

Диалоговое окно выбора даты и времени

Я хочу создать диалоговое окно, в котором можно выбрать время и дату в то же время.
Я знаю, что нет виджета по умолчанию, который можно сделать на Android. Я также знаю, что существуют проекты с открытым исходным кодом о том, как работают аналогичные сотрудники. Проблема в этом проекте заключается в том, что в диалоговом окне есть две кнопки: datePicker и timePicker.

enter image description here

И это не то, что я хочу сделать - я хочу, чтобы одновременно были выбраны дата и время.
Поэтому я думаю, что две основные проблемы:

  • Сначала сделайте выбор времени и даты в том же диалоговом окне.
  • И вторая проблема будет заключаться в изменении внешнего вида выбора даты и времени (оранжевого цвета).

Первая проблема была решена Бхавешем. Вот что я получаю:

enter image description here

Теперь проблема заключается в том, что я хочу изменить весь цвет синего штриха на оранжевый цвет.
Я добавил android:calendarViewShown="false", чтобы удалить календарь справа:) Спасибо Bhavesh, и я сменил тему на HOLO
Вот что я получаю:

enter image description here

Вы можете загрузить код (что я могу сделать лучше). Вы можете скачать с здесь.

4b9b3361

Ответ 1

Сначала сделайте выбор времени и даты в том же диалоговом окне

Здесь я могу вам кое-что помочь: вы можете создать макет, состоящий из DatePicker и TimePicker в LinearLayout с ориентацией, установленной на вертикальную.

custom_dialog.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/linearLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

    <DatePicker
         android:id="@+id/datePicker1"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content" >
    </DatePicker>

    <TimePicker
        android:id="@+id/timePicker1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >
    </TimePicker>

</LinearLayout>

Затем используйте этот макет для создания диалога.

Dialog dialog = new Dialog(mContext);

dialog.setContentView(R.layout.custom_dialog);
dialog.setTitle("Custom Dialog");

Чтобы отреагировать на пользователя, взаимодействующего с вашим TimePicker, выполните следующие действия:

TimePicker tp = (TimePicker)dialog.findViewById(R.id.timepicker1);
tp.setOnTimeChangedListener(myOnTimechangedListener);

Чтобы получить значения из Date- и TimePicker, когда пользователь закончил их настройку, добавьте кнопку ОК в свой диалог, а затем прочитайте значения даты и времени из Date- и TimePicker, когда пользователь нажмет OK.

Чтобы сделать что-то, что выглядит точно так же, как в ваших снимках экрана, я рекомендую вам сделать все, что угодно, с вашей собственной логикой.

Ответ 2

Чтобы изменить цвет синего цвета, попробуйте ниже.

Определите свою собственную тему следующим образом, которая расширяет THEME_HOLO_DARK

Попробуйте сделать следующее: -

<style name="testo" parent="@android:style/Widget.DeviceDefault.DatePicker">
    <item name="android:divider">@drawable/MyDivider</item>
</style>

Проверьте следующие change-basic-theme-color-of-android-application

Ответ 3

Есть много доступных решений, есть один из них, мне нравится этот простой метод:

String mDateTime;
void getDateTime(){
    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);
    final int hour = c.get(Calendar.HOUR_OF_DAY);
    final int minute = c.get(Calendar.MINUTE);
    mDateTime = "";
    new DatePickerDialog(
            mContext, new DatePickerDialog.OnDateSetListener() {
        @Override
        public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
            mDateTime =  year +"-"+  month +"-"+ dayOfMonth;
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    new TimePickerDialog(mContext, new TimePickerDialog.OnTimeSetListener() {
                        @Override
                        public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
                            mDateTime+=" "+hourOfDay+":"+minute;
                        }
                    }, hour, minute, false).show();
                }
            },500);
        }
    }, year, month, day).show();
}