Android - 在datepickerdialog中隐藏日期字段

Ish*_*shu 9 android android-datepicker

如何在datepickerdialog中隐藏/删除日期字段.实际上我的要求是使用本机日期选择器对话框,但它显示日,月和年.但根据我的要求,我只需要一个月和一年.所以我想隐藏或删除视图中的日期字段.

任何帮助都会非常有用.

Eve*_*rio 11

我不建议使用Reflection来做这种事情.

有一种更简单,更漂亮的方法:

((ViewGroup) datePickerDialog.getDatePicker()).findViewById(Resources.getSystem().getIdentifier("day", "id", "android")).setVisibility(View.GONE);
Run Code Online (Sandbox Code Playgroud)

请注意该.getDatePicker()方法的DatePickerDialog工作原理API LEVEL >= 11.

  • 这会在棒棒糖设备上导致空指针异常,因为它们使用不同的日期选择器布局. (4认同)

Sha*_*wal 6

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;

}
Run Code Online (Sandbox Code Playgroud)

使用上面的代码隐藏 DatePickerDialog 中的日期字段。

参考这个链接

  • 这是一个卑鄙的建议。最可靠的答案是自己动手。即使你想玩像这里建议的脚本小游戏,也不要使用反射——通过`getDatePicker()` 和`findViewById()` 获取特定小部件并以这种方式设置它们的可见性。这两种方法都对内部实现进行了假设,这些假设可能不适用于 Android 操作系统版本或 OEM 固件修改,但至少 findViewById() 方法会做出更少的假设(并且可能运行得更快)。 (13认同)

Com*_*are 6

源代码DatePickerDatePickerDialog可用于克隆,重构到您自己的包中,并修改以适应.