我想创建一个对话框,可以同时选择时间和日期。
我知道there is not a default widget that can do that on Android。我也知道open source projects关于如何做类似的工作人员。这个项目的问题是在对话框中我们有两个按钮: datePicker 和 timePicker 。
这不是我想要的 - 我希望日期和时间选择器同时出现。
所以我认为两个主要问题是:
第一个问题由Bhavesh解决。这是我得到的:
现在的问题是我想将所有蓝条颜色更改为橙色。
我添加android:calendarViewShown="false"
以删除右侧的日历:)感谢Bhavesh,我将主题更改为 HOLO
这是我得到的:
您可以下载代码(这是我能做的最好的代码)。您可以从here下载。
答案 0 :(得分:77)
首先让时间和日期选择器出现在同一个对话框中
在这里,我可以为您提供一些帮助:您可以在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中读取日期和时间值。 / p>
为了制作与您的屏幕截图完全相同的内容,我建议您使用自己的逻辑来制作所有内容。
答案 1 :(得分:2)
要更改蓝条颜色,请尝试以下操作。
定义您自己的主题,如下所示,扩展了THEME_HOLO_DARK
尝试如下: -
<style name="testo" parent="@android:style/Widget.DeviceDefault.DatePicker">
<item name="android:divider">@drawable/MyDivider</item>
</style>
答案 2 :(得分: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();
}
答案 3 :(得分:0)