52

我想创建一个可以同时选择时间日期的对话框。
我知道在 Android 上没有可以做到这一点的默认小部件。我也知道有开源项目关于如何做类似的工作人员。这个项目的问题是在对话框中我们有两个按钮:datePickertimePicker

在此处输入图像描述

这不是我想要做的——我希望日期和时间选择器同时出现。
所以我认为两个主要问题将是:

  1. 首先让时间和日期选择器出现在同一个对话框中。
  2. 第二个问题是更改时间和日期选择器的外观(橙色)。

第一个问题由 Bhavesh 解决。这是我得到的:

在此处输入图像描述

现在的问题是我想将所有蓝色条颜色更改为橙​​色
我添加android:calendarViewShown="false"以删除右侧的日历 :) 谢谢 Bhavesh,我将主题更改为HOLO
这是我得到的:

在此处输入图像描述

您可以下载代码(这是我能做的最好的)。你可以从这里下载。

4

4 回答 4

77

首先让时间和日期选择器出现在同一个对话框中

在这里,我可以帮助您:您可以创建一个由 aDatePicker和 a TimePickerin a组成的布局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 中获取值,请在对话框中添加一个 OK 按钮,然后在用户按 OK 时从 Date- 和 TimePicker 中读取日期和时间值。

要制作与屏幕截图完全相同的内容,我建议您使用自己的逻辑自定义所有内容。

于 2013-01-10T09:17:26.670 回答
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

于 2013-01-10T09:56:20.183 回答
1

日期选择器时间选择器都在一个对话框中。检查这个简单易用的库。自定义日期时间选择器

在此处输入图像描述 在此处输入图像描述

希望能帮助到你。快乐编码!!!

于 2020-04-19T05:58:30.847 回答
0

有很多可用的解决方案,其中一个,我喜欢这个简单的方法:

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();
}
于 2017-07-13T12:09:27.403 回答