@H_404_1@我正在处理用户可以设置日期和时间的应用程序.我想在单个对话片段中设置日期和时间,并将其设置为编辑文本.可以在1个对话片段中使用日期和时间选择器吗?如果是这样,你怎么做?
目前,我正在从对话片段中获取时间,然后将其设置为EditText.
目前,我正在从对话片段中获取时间,然后将其设置为EditText.
我的代码是
LaterTextView=(TextView)findViewById(R.id.PickUp_later_TextView); LaterTextView.setOnClickListener(new View.OnClickListener() { @SuppressWarnings("deprecation") public void onClick(View v) { showDialog(TIME_DIALOG_ID); } }); } protected Dialog onCreateDialog(int id) { switch (id) { case TIME_DIALOG_ID: // set time picker as current time return new TimePickerDialog(this,timePickerListener,hour,minute,false); } return null; } private TimePickerDialog.OnTimeSetListener timePickerListener = new TimePickerDialog.OnTimeSetListener() { public void onTimeSet(TimePicker view,int selectedHour,int selectedMinute) { hour = selectedHour; minute = selectedMinute; // set current time into TextView setDate_time_EditTExt.setText(new StringBuilder().append(pad(hour)) .append(":").append(pad(minute))); } }; private static String pad(int c) { if (c >= 10) return String.valueOf(c); else return "0" + String.valueOf(c); }
我想从相同的对话框片段设置日期和时间.
解决方法
日期选择器和时间选择器都在单个对话框中.检查这个代码.
main_Activity.java
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); custom = new CustomDateTimePicker(this,new CustomDateTimePicker.ICustomDateTimeListener() { @Override public void onSet(Dialog dialog,Calendar calendarSelected,Date dateSelected,int year,String monthFullName,String monthShortName,int monthNumber,int date,String weekDayFullName,String weekDayShortName,int hour24,int hour12,int min,int sec,String AM_PM) { ((TextView) findViewById(R.id.lablel)) .setText(calendarSelected .get(Calendar.DAY_OF_MONTH) + "/" + (monthNumber+1) + "/" + year + "," + hour12 + ":" + min + " " + AM_PM); } @Override public void onCancel() { } }); /** * Pass Directly current time format it will return AM and PM if you set * false */ custom.set24HourFormat(false); /** * Pass Directly current data and time to show when it pop up */ custom.setDate(Calendar.getInstance()); findViewById(R.id.button_date).setOnClickListener( new OnClickListener() { @Override public void onClick(View v) { custom.showDialog(); } }); } CustomDateTimePicker custom; @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main,menu); return true; }
CustomDateTimePicker.java
public class CustomDateTimePicker implements OnClickListener { private DatePicker datePicker; private TimePicker timePicker; private ViewSwitcher viewSwitcher; private final int SET_DATE = 100,SET_TIME = 101,SET = 102,CANCEL = 103; private Button btn_setDate,btn_setTime,btn_set,btn_cancel; private Calendar calendar_date = null; private Activity activity; private ICustomDateTimeListener iCustomDateTimeListener = null; private Dialog dialog; private boolean is24HourView = true,isAutoDismiss = true; private int selectedHour,selectedMinute; public CustomDateTimePicker(Activity a,ICustomDateTimeListener customDateTimeListener) { activity = a; iCustomDateTimeListener = customDateTimeListener; dialog = new Dialog(activity); dialog.setOnDismissListener(new OnDismissListener() { @Override public void onDismiss(DialogInterface dialog) { resetData(); } }); dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); View dialogView = getDateTimePickerLayout(); dialog.setContentView(dialogView); } public View getDateTimePickerLayout() { LinearLayout.LayoutParams linear_match_wrap = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.MATCH_PARENT); LinearLayout.LayoutParams linear_wrap_wrap = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT); FrameLayout.LayoutParams frame_match_wrap = new FrameLayout.LayoutParams( FrameLayout.LayoutParams.MATCH_PARENT,FrameLayout.LayoutParams.WRAP_CONTENT); LinearLayout.LayoutParams button_params = new LinearLayout.LayoutParams( 0,LinearLayout.LayoutParams.WRAP_CONTENT,1.0f); LinearLayout linear_main = new LinearLayout(activity); linear_main.setLayoutParams(linear_match_wrap); linear_main.setOrientation(LinearLayout.VERTICAL); linear_main.setGravity(Gravity.CENTER); LinearLayout linear_child = new LinearLayout(activity); linear_child.setLayoutParams(linear_wrap_wrap); linear_child.setOrientation(LinearLayout.VERTICAL); LinearLayout linear_top = new LinearLayout(activity); linear_top.setLayoutParams(linear_match_wrap); btn_setDate = new Button(activity); btn_setDate.setLayoutParams(button_params); btn_setDate.setText("Set Date"); btn_setDate.setId(SET_DATE); btn_setDate.setOnClickListener(this); btn_setTime = new Button(activity); btn_setTime.setLayoutParams(button_params); btn_setTime.setText("Set Time"); btn_setTime.setId(SET_TIME); btn_setTime.setOnClickListener(this); linear_top.addView(btn_setDate); linear_top.addView(btn_setTime); viewSwitcher = new ViewSwitcher(activity); viewSwitcher.setLayoutParams(frame_match_wrap); datePicker = new DatePicker(activity); timePicker = new TimePicker(activity); timePicker.setOnTimeChangedListener(new OnTimeChangedListener() { @Override public void onTimeChanged(TimePicker view,int hourOfDay,int minute) { selectedHour = hourOfDay; selectedMinute = minute; } }); viewSwitcher.addView(timePicker); viewSwitcher.addView(datePicker); LinearLayout linear_bottom = new LinearLayout(activity); linear_match_wrap.topMargin = 8; linear_bottom.setLayoutParams(linear_match_wrap); btn_set = new Button(activity); btn_set.setLayoutParams(button_params); btn_set.setText("Set"); btn_set.setId(SET); btn_set.setOnClickListener(this); btn_cancel = new Button(activity); btn_cancel.setLayoutParams(button_params); btn_cancel.setText("Cancel"); btn_cancel.setId(CANCEL); btn_cancel.setOnClickListener(this); linear_bottom.addView(btn_set); linear_bottom.addView(btn_cancel); linear_child.addView(linear_top); linear_child.addView(viewSwitcher); linear_child.addView(linear_bottom); linear_main.addView(linear_child); return linear_main; } public void showDialog() { if (!dialog.isShowing()) { if (calendar_date == null) calendar_date = Calendar.getInstance(); selectedHour = calendar_date.get(Calendar.HOUR_OF_DAY); selectedMinute = calendar_date.get(Calendar.MINUTE); timePicker.setIs24HourView(is24HourView); timePicker.setCurrentHour(selectedHour); timePicker.setCurrentMinute(selectedMinute); datePicker.updateDate(calendar_date.get(Calendar.YEAR),calendar_date.get(Calendar.MONTH),calendar_date.get(Calendar.DATE)); dialog.show(); btn_setDate.performClick(); } } public void setAutoDismiss(boolean isAutoDismiss) { this.isAutoDismiss = isAutoDismiss; } public void dismissDialog() { if (!dialog.isShowing()) dialog.dismiss(); } public void setDate(Calendar calendar) { if (calendar != null) calendar_date = calendar; } public void setDate(Date date) { if (date != null) { calendar_date = Calendar.getInstance(); calendar_date.setTime(date); } } public void setDate(int year,int month,int day) { if (month < 12 && month >= 0 && day < 32 && day >= 0 && year > 100 && year < 3000) { calendar_date = Calendar.getInstance(); calendar_date.set(year,month,day); } } public void setTimeIn24HourFormat(int hourIn24Format,int minute) { if (hourIn24Format < 24 && hourIn24Format >= 0 && minute >= 0 && minute < 60) { if (calendar_date == null) calendar_date = Calendar.getInstance(); calendar_date.set(calendar_date.get(Calendar.YEAR),calendar_date.get(Calendar.DAY_OF_MONTH),hourIn24Format,minute); is24HourView = true; } } public void setTimeIn12HourFormat(int hourIn12Format,int minute,boolean isAM) { if (hourIn12Format < 13 && hourIn12Format > 0 && minute >= 0 && minute < 60) { if (hourIn12Format == 12) hourIn12Format = 0; int hourIn24Format = hourIn12Format; if (!isAM) hourIn24Format += 12; if (calendar_date == null) calendar_date = Calendar.getInstance(); calendar_date.set(calendar_date.get(Calendar.YEAR),minute); is24HourView = false; } } public void set24HourFormat(boolean is24HourFormat) { is24HourView = is24HourFormat; } public interface ICustomDateTimeListener { public void onSet(Dialog dialog,String AM_PM); public void onCancel(); } @Override public void onClick(View v) { switch (v.getId()) { case SET_DATE: btn_setTime.setEnabled(true); btn_setDate.setEnabled(false); viewSwitcher.showNext(); break; case SET_TIME: btn_setTime.setEnabled(false); btn_setDate.setEnabled(true); viewSwitcher.showPrevIoUs(); break; case SET: if (iCustomDateTimeListener != null) { int month = datePicker.getMonth(); int year = datePicker.getYear(); int day = datePicker.getDayOfMonth(); calendar_date.set(year,day,selectedHour,selectedMinute); iCustomDateTimeListener.onSet(dialog,calendar_date,calendar_date.getTime(),calendar_date .get(Calendar.YEAR),getMonthFullName(calendar_date.get(Calendar.MONTH)),getMonthShortName(calendar_date.get(Calendar.MONTH)),calendar_date .get(Calendar.DAY_OF_MONTH),getWeekDayFullName(calendar_date .get(Calendar.DAY_OF_WEEK)),getWeekDayShortName(calendar_date .get(Calendar.DAY_OF_WEEK)),calendar_date .get(Calendar.HOUR_OF_DAY),getHourIn12Format(calendar_date .get(Calendar.HOUR_OF_DAY)),calendar_date .get(Calendar.MINUTE),calendar_date .get(Calendar.SECOND),getAMPM(calendar_date)); } if (dialog.isShowing() && isAutoDismiss) dialog.dismiss(); break; case CANCEL: if (iCustomDateTimeListener != null) iCustomDateTimeListener.onCancel(); if (dialog.isShowing()) dialog.dismiss(); break; } } /** * @param date * date in String * @param fromFormat * format of your <b>date</b> eg: if your date is 2011-07-07 * 09:09:09 then your format will be <b>yyyy-MM-dd hh:mm:ss</b> * @param toFormat * format to which you want to convert your <b>date</b> eg: if * required format is 31 July 2011 then the toFormat should be * <b>d MMMM yyyy</b> * @return formatted date */ public static String convertDate(String date,String fromFormat,String toFormat) { try { SimpleDateFormat simpleDateFormat = new SimpleDateFormat(fromFormat); Date d = simpleDateFormat.parse(date); Calendar calendar = Calendar.getInstance(); calendar.setTime(d); simpleDateFormat = new SimpleDateFormat(toFormat); simpleDateFormat.setCalendar(calendar); date = simpleDateFormat.format(calendar.getTime()); } catch (Exception e) { e.printStackTrace(); } return date; } private String getMonthFullName(int monthNumber) { Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.MONTH,monthNumber); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MMMM"); simpleDateFormat.setCalendar(calendar); String monthName = simpleDateFormat.format(calendar.getTime()); return monthName; } private String getMonthShortName(int monthNumber) { Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.MONTH,monthNumber); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MMM"); simpleDateFormat.setCalendar(calendar); String monthName = simpleDateFormat.format(calendar.getTime()); return monthName; } private String getWeekDayFullName(int weekDayNumber) { Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.DAY_OF_WEEK,weekDayNumber); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("EEEE"); simpleDateFormat.setCalendar(calendar); String weekName = simpleDateFormat.format(calendar.getTime()); return weekName; } private String getWeekDayShortName(int weekDayNumber) { Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.DAY_OF_WEEK,weekDayNumber); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("EE"); simpleDateFormat.setCalendar(calendar); String weekName = simpleDateFormat.format(calendar.getTime()); return weekName; } private int getHourIn12Format(int hour24) { int hourIn12Format = 0; if (hour24 == 0) hourIn12Format = 12; else if (hour24 <= 12) hourIn12Format = hour24; else hourIn12Format = hour24 - 12; return hourIn12Format; } private String getAMPM(Calendar calendar) { String ampm = (calendar.get(Calendar.AM_PM) == (Calendar.AM)) ? "AM" : "PM"; return ampm; } private void resetData() { calendar_date = null; is24HourView = true; } public static String pad(int integerToPad) { if (integerToPad >= 10 || integerToPad < 0) return String.valueOf(integerToPad); else return "0" + String.valueOf(integerToPad); } }
activity_main.xml中
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:id="@+id/lablel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:padding="@dimen/padding_medium" android:text="@string/hello_world" android:textColor="#000" android:textSize="20dp" tools:context=".MainActivity" /> <Button android:id="@+id/button_date" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/lablel" android:layout_centerHorizontal="true" android:layout_marginTop="80dp" android:text="Date Time Picker" /> </RelativeLayout>