Android – 在datepickerdialog中隐藏date字段

如何隐藏/删除datepickerdialog中的date字段。 其实我的要求是使用本地dateselect器对话框,但它显示与date,月份和年份。 但根据我的要求,我只需要一个月和一年。 所以我想从视图中隐藏或删除一天的字段。

任何帮助将是非常有用的。

Solutions Collecting From Web of "Android – 在datepickerdialog中隐藏date字段"

Private DatePickerDialog createDialogWithoutDateField(){ DatePickerDialog dpd = new DatePickerDialog(_activity, ExpiryDateSetListener,cyear,cmonth, cday); try{ Field[] datePickerDialogFields = dpd.getClass().getDeclaredFields(); for (Field datePickerDialogField : datePickerDialogFields) { if (datePickerDialogField.getName().equals("mDatePicker")) { datePickerDialogField.setAccessible(true); DatePicker datePicker = (DatePicker) datePickerDialogField.get(dpd); Field datePickerFields[] = datePickerDialogField.getType().getDeclaredFields(); for (Field datePickerField : datePickerFields) { if ("mDayPicker".equals(datePickerField.getName())) { datePickerField.setAccessible(true); Object dayPicker = new Object(); dayPicker = datePickerField.get(datePicker); ((View) dayPicker).setVisibility(View.GONE); } } } } }catch(Exception ex){ } return dpd; } 

使用上面的代码来隐藏DatePickerDialog中的date字段。

参考这个链接

我不build议使用reflection做这种事情。

有一个更简单,更漂亮的方法来做到这一点:

 ((ViewGroup) datePickerDialog.getDatePicker()).findViewById(Resources.getSystem().getIdentifier("day", "id", "android")).setVisibility(View.GONE); 

请注意, DatePickerDialog中的.getDatePicker()方法在API LEVEL >= 11

DatePickerDatePickerDialog的源代码可供您克隆,重构到您自己的包中,并进行修改以适应。

 ((ViewGroup) datePickerDialog.getDatePicker()).findViewById(Resources.getSystem().getIdentifier("day", "id", "android")).setVisibility(View.GONE); 

这工作正常

  Calendar c = Calendar.getInstance(); int mYear = c.get(Calendar.YEAR); int mMonth = c.get(Calendar.MONTH); int mDay = c.get(Calendar.DAY_OF_MONTH); DatePickerDialog datePickerDialog = new DatePickerDialog(getActivity(), AlertDialog.THEME_HOLO_DARK, new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { txtMonth.setText(dayOfMonth + "-" + (monthOfYear + 1) + "-" + year); } }, mYear, mMonth, mDay); ((ViewGroup) datePickerDialog.getDatePicker()).findViewById(Resources.getSystem().getIdentifier("day", "id", "android")).setVisibility(View.GONE); datePickerDialog.show(); 

请参阅此链接在datepicker示例上禁用dateselect

  private Calendar mCalendar; mCalendar = Calendar.getInstance();// Initialize Calendar 

dialog_date_picker.xml

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/rounded_corners" android:orientation="vertical" android:padding="8dp"> <DatePicker android:id="@+id/date_picker" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="4" android:calendarViewShown="false" android:datePickerMode="spinner" /> <Button android:id="@+id/date_time_set" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:background="@color/colorPrimary" android:text="Set" android:textColor="@color/colorWhite" /></LinearLayout> 

DialogMethod调用点击:

 private void ExpiryDialog() { System.out.println("Inside Dialog Box"); final Dialog dialog = new Dialog(context); dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); dialog.setContentView(R.layout.dialog_date_picker); dialog.show(); final DatePicker datePicker = (DatePicker) dialog.findViewById(R.id.date_picker); date_time_set = (Button) dialog.findViewById(R.id.date_time_set); datePicker.init(mCalendar.get(Calendar.YEAR), mCalendar.get(Calendar.MONTH), mCalendar.get(Calendar.DAY_OF_MONTH), null); LinearLayout ll = (LinearLayout) datePicker.getChildAt(0); LinearLayout ll2 = (LinearLayout) ll.getChildAt(0); ll2.getChildAt(1).setVisibility(View.INVISIBLE); date_time_set.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view){ dialog.dismiss(); Integer month = datePicker.getMonth()+1; Integer year = datePicker.getYear(); expMonth = (month.toString().length() == 1 ? "0"+month.toString():month.toString()); expYear = year.toString(); etExpiryDate.setText(expMonth + "/" + expYear); } }); } 

此代码工作并隐藏在DatePicker的一天,所以我可以显示卡的到期date。 请享用!!

我不认为你需要去那么深,除非你想定制它..有:

 mDatePicker.getDatePicker().setCalendarViewShown(false); 

这是一个非常合法的电话去除日历段。