我在我的应用程序中使用日期选择器和时间选择器。我想在同一个对话框中设置它们。或者同时我想设置日期和时间。这可能吗?怎么样?请给我一个例子。
提前致谢。
答案 0 :(得分:4)
使用以下功能
private void showDateTimeDialog() {
// Create the dialog
final Dialog mDateTimeDialog = new Dialog(this);
// Inflate the root layout
final RelativeLayout mDateTimeDialogView = (RelativeLayout) getLayoutInflater().inflate(R.layout.date_time_dialog, null);
// Grab widget instance
final DateTimePicker mDateTimePicker = (DateTimePicker) mDateTimeDialogView.findViewById(R.id.DateTimePicker);
// Check is system is set to use 24h time (this doesn't seem to work as expected though)
final String timeS = android.provider.Settings.System.getString(getContentResolver(), android.provider.Settings.System.TIME_12_24);
final boolean is24h = !(timeS == null || timeS.equals("12"));
// Update demo TextViews when the "OK" button is clicked
((Button) mDateTimeDialogView.findViewById(R.id.SetDateTime)).setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
/*((TextView) findViewById(R.id.Date)).setText(mDateTimePicker.get(Calendar.YEAR) + "/" + (mDateTimePicker.get(Calendar.MONTH)+1) + "/"
+ mDateTimePicker.get(Calendar.DAY_OF_MONTH));
if (mDateTimePicker.is24HourView()) {
((TextView) findViewById(R.id.Time)).setText(mDateTimePicker.get(Calendar.HOUR_OF_DAY) + ":" + mDateTimePicker.get(Calendar.MINUTE));
} else {
((TextView) findViewById(R.id.Time)).setText(mDateTimePicker.get(Calendar.HOUR) + ":" + mDateTimePicker.get(Calendar.MINUTE) + " "
+ (mDateTimePicker.get(Calendar.AM_PM) == Calendar.AM ? "AM" : "PM"));
}*/
String date = (mDateTimePicker.get(Calendar.MONTH)+1) + "/" + mDateTimePicker.get(Calendar.DAY_OF_MONTH) + "/"
+mDateTimePicker.get(Calendar.YEAR)+" "+mDateTimePicker.get(Calendar.HOUR_OF_DAY) + ":" + mDateTimePicker.get(Calendar.MINUTE)+" "+(mDateTimePicker.get(Calendar.AM_PM) == Calendar.AM ? "AM" : "PM");
edt_admin_due_date.setText(date);
mDateTimeDialog.dismiss();
}//MM/dd/yyyy hh:mm
});
// Cancel the dialog when the "Cancel" button is clicked
((Button) mDateTimeDialogView.findViewById(R.id.CancelDialog)).setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
mDateTimeDialog.cancel();
}
});
// Reset Date and Time pickers when the "Reset" button is clicked
((Button) mDateTimeDialogView.findViewById(R.id.ResetDateTime)).setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
mDateTimePicker.reset();
}
});
// Setup TimePicker
mDateTimePicker.setIs24HourView(is24h);
// No title on the dialog window
mDateTimeDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
// Set the dialog content view
mDateTimeDialog.setContentView(mDateTimeDialogView);
// Display the dialog
mDateTimeDialog.show();
}
和datetimepicker文件如下。
public class DateTimePicker extends RelativeLayout implements View.OnClickListener, OnDateChangedListener, OnTimeChangedListener {
// DatePicker reference
private DatePicker datePicker;
// TimePicker reference
private TimePicker timePicker;
// ViewSwitcher reference
private ViewSwitcher viewSwitcher;
// Calendar reference
private Calendar mCalendar;
// Constructor start
public DateTimePicker(Context context) {
this(context, null);
}
public DateTimePicker(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public DateTimePicker(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// Get LayoutInflater instance
final LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
// Inflate myself
inflater.inflate(R.layout.datetimepicker, this, true);
// Inflate the date and time picker views
final LinearLayout datePickerView = (LinearLayout) inflater.inflate(R.layout.datepicker, null);
final LinearLayout timePickerView = (LinearLayout) inflater.inflate(R.layout.timepicker, null);
// Grab a Calendar instance
mCalendar = Calendar.getInstance();
// Grab the ViewSwitcher so we can attach our picker views to it
viewSwitcher = (ViewSwitcher) this.findViewById(R.id.DateTimePickerVS);
// Init date picker
datePicker = (DatePicker) datePickerView.findViewById(R.id.DatePicker);
datePicker.init(mCalendar.get(Calendar.YEAR), mCalendar.get(Calendar.MONTH), mCalendar.get(Calendar.DAY_OF_MONTH), this);
// Init time picker
timePicker = (TimePicker) timePickerView.findViewById(R.id.TimePicker);
timePicker.setOnTimeChangedListener(this);
// Handle button clicks
((Button) findViewById(R.id.SwitchToTime)).setOnClickListener(this); // shows the time picker
((Button) findViewById(R.id.SwitchToDate)).setOnClickListener(this); // shows the date picker
// Populate ViewSwitcher
viewSwitcher.addView(datePickerView, 0);
viewSwitcher.addView(timePickerView, 1);
}
// Constructor end
// Called every time the user changes DatePicker values
public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
// Update the internal Calendar instance
mCalendar.set(year, monthOfYear, dayOfMonth, mCalendar.get(Calendar.HOUR_OF_DAY), mCalendar.get(Calendar.MINUTE));
}
// Called every time the user changes TimePicker values
public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
// Update the internal Calendar instance
mCalendar.set(mCalendar.get(Calendar.YEAR), mCalendar.get(Calendar.MONTH), mCalendar.get(Calendar.DAY_OF_MONTH), hourOfDay, minute);
}
// Handle button clicks
public void onClick(View v) {
switch (v.getId()) {
case R.id.SwitchToDate:
v.setEnabled(false);
findViewById(R.id.SwitchToTime).setEnabled(true);
viewSwitcher.showPrevious();
break;
case R.id.SwitchToTime:
v.setEnabled(false);
findViewById(R.id.SwitchToDate).setEnabled(true);
viewSwitcher.showNext();
break;
}
}
// Convenience wrapper for internal Calendar instance
public int get(final int field) {
return mCalendar.get(field);
}
// Reset DatePicker, TimePicker and internal Calendar instance
public void reset() {
final Calendar c = Calendar.getInstance();
updateDate(c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH));
updateTime(c.get(Calendar.HOUR_OF_DAY),c.get(Calendar.MINUTE));
}
// Convenience wrapper for internal Calendar instance
public long getDateTimeMillis() {
return mCalendar.getTimeInMillis();
}
// Convenience wrapper for internal TimePicker instance
public void setIs24HourView(boolean is24HourView) {
timePicker.setIs24HourView(is24HourView);
}
// Convenience wrapper for internal TimePicker instance
public boolean is24HourView() {
return timePicker.is24HourView();
}
// Convenience wrapper for internal DatePicker instance
public void updateDate(int year, int monthOfYear, int dayOfMonth) {
datePicker.updateDate(year, monthOfYear, dayOfMonth);
}
// Convenience wrapper for internal TimePicker instance
public void updateTime(int currentHour, int currentMinute) {
timePicker.setCurrentHour(currentHour);
timePicker.setCurrentMinute(currentMinute);
}
}
这在我的代码中可以正常工作
答案 1 :(得分:0)
以下代码将帮助您获得两者,
date_time_picker.xml
<?xml version="1.0" encoding="utf-8"?>
<ScrollView android:id="@+id/scrollView1"
android:layout_width="match_parent" android:layout_height="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout android:layout_width="match_parent"
android:id="@+id/linearLayout1" android:orientation="vertical"
android:layout_height="match_parent">
<DatePicker android:layout_width="wrap_content"
android:layout_height="wrap_content" android:id="@+id/datePicker"></DatePicker>
<TimePicker android:id="@+id/timePicker"
android:layout_width="wrap_content" android:layout_height="wrap_content"></TimePicker>
<TableRow android:id="@+id/tableRow1" android:layout_height="wrap_content"
android:layout_width="match_parent" android:gravity="center">
<Button android:id="@+id/btnSetDateTime"
android:layout_height="wrap_content" android:text="Set"
android:layout_width="120dp"></Button>
</TableRow>
</LinearLayout>
使用以下java代码:
ScrollView DTPicker = (ScrollView) View.inflate(context,
R.layout.date_time_picker, null);
Button btnSet = (Button) DTPicker.findViewById(R.id.btnSetDateTime);
DatePicker dp = (DatePicker) DTPicker.findViewById(R.id.datePicker);
TimePicker tp = (TimePicker) DTPicker.findViewById(R.id.timePicker);
btnSet.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
String strDateTime = dp.getYear() + "-"
+ (dp.getMonth() + 1) + "-"
+ dp.getDayOfMonth() + " "
+ tp.getCurrentHour() + ":"
+ tp.getCurrentMinute();
}});
alert = new AlertDialog.Builder(context).create();
alert.setTitle("Reminder");
alert.setView(DTPicker);
alert.show();