从DatePickerDialog中删除年份

kir*_*882 4 android datepicker

我正在使用Android上的基本DatePickerDialog教程,这里有Android Date Picker

而且我已经完成了它.但我只想从今年开始选择一个日期.那么有没有办法从Dialog中删除年份,以便只显示月份和日期?每次我尝试将Year取出时都会破坏代码.

ρяσ*_*я K 9

是的可能.DatePicker具有内置的三个NumberPicker控件,后跟年,月,日,首先隐藏.

final Calendar cal = Calendar.getInstance();
mDialog = new CustomerDatePickerDialog(getContext(), this,
cal.get(Calendar.YEAR), cal.get(Calendar.MONTH),
cal.get(Calendar.DAY_OF_MONTH));
mDialog.show();
DatePicker dp = findDatePicker((ViewGroup) mDialog.getWindow().getDecorView());
if (dp != null) {
    ((ViewGroup) dp.getChildAt(0)).getChildAt(0).setVisibility(View.GONE);
} 
Run Code Online (Sandbox Code Playgroud)

CustomerDatePickerDialog

class CustomerDatePickerDialog extends DatePickerDialog {
     public CustomerDatePickerDialog(Context context, OnDateSetListener callBack, int year, int monthOfYear, int dayOfMonth) {
         super(context, callBack, year, monthOfYear, dayOfMonth);
     }

     @Override
     public void onDateChanged(DatePicker view, int year, int month, int day) {
         super.onDateChanged(view, year, month, day);
         mDialog.setTitle((month + 1) + "-" + day + "-");
     }
}
Run Code Online (Sandbox Code Playgroud)

DatePicker:

private DatePicker findDatePicker(ViewGroup group) {
        if (group != null) {
            for (int i = 0, j = group.getChildCount(); i < j; i++) {
                View child = group.getChildAt(i);
                if (child instanceof DatePicker) {
                    return (DatePicker) child;
                } else if (child instanceof ViewGroup) {
                    DatePicker result = findDatePicker((ViewGroup) child);
                    if (result != null)
                        return result;
                }
            }
        }
        return null;

    } 
Run Code Online (Sandbox Code Playgroud)


vtl*_*inh 9

一个班轮:

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

确保在构建对话框时选择闰年(例如1904)以确保日历中包含2月29日:

        DatePickerDialog dialog = new DatePickerDialog(getContext(),
                listener,
                1904,
                month,
                dayOfMonth
        );
        dialog.show();
Run Code Online (Sandbox Code Playgroud)


小智 5

我不确定隐藏第一个孩子是否是个好主意。我测试了这个解决方案:

  1. Android 2.3 -> 它可以工作(day spinner 不见了)
  2. Android 4.0 -> 它不起作用,因为还有一个元素(日历)并且第一个微调器不是一天而是一个月。

更好的解决方案可能是将源代码修改DatePicker为您自己的包