仅包含日期和月份的Android日期选择器

che*_*ist 8 android datepicker

我正在寻找一种方法来自定义Android中的日期选择器,只显示日期和月份(即没有年份).

我正在创建一个基于如何显示android的日期选择器的对话框,只有月份和年份字段?:

    Dialog dlg = new DatePickerDialog(context, datePickerListener, dueDateCalendar.get(Calendar.YEAR), dueDateCalendar.get(Calendar.MONTH), dueDateCalendar.get(Calendar.DAY_OF_MONTH));
    try {
        Field f[] = dlg.getClass().getDeclaredFields();
        for (Field field : f) {
            String name = field.getName();
            if (name.equals("YEAR")){
                field.setAccessible(true);
                Object dayPicker = new Object();
                dayPicker = field.get(dlg);
                ((View) dayPicker).setVisibility(View.GONE);
            }
        }
    } catch (Exception e){
        // TODO: should not happen
        e.printStackTrace();
    }
    return dlg;
Run Code Online (Sandbox Code Playgroud)

但我一直在((查看)dayPicker).setVisibility(View.GONE)上获得Cast异常;

java.lang.ClassCastException:java.lang.String无法强制转换为android.view.View

有任何想法吗?

Sim*_*mon 18

在这里一试.它的APIv11 +但是在较低的API版本上还有其他方法.

DatePickerDialog dlg = new DatePickerDialog(context, datePickerListener, 
    dueDateCalendar.get(Calendar.YEAR), 
    dueDateCalendar.get(Calendar.MONTH), 
    dueDateCalendar.get(Calendar.DAY_OF_MONTH));
int year = context.getResources().getIdentifier("android:id/year", null, null);
if(year != 0){
    View yearPicker = dlg.getDatePicker().findViewById(year);
    if(yearPicker != null){
        yearPicker.setVisibility(View.GONE);
    }
}
return dlg;
Run Code Online (Sandbox Code Playgroud)

更新的代码:这应该可以胜任.

DatePickerDialog dlg = new DatePickerDialog(context, datePickerListener, 
    dueDateCalendar.get(Calendar.YEAR), 
    dueDateCalendar.get(Calendar.MONTH), 
    dueDateCalendar.get(Calendar.DAY_OF_MONTH))
{
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        int year = getContext().getResources()
            .getIdentifier("android:id/year", null, null);
        if(year != 0){
            View yearPicker = findViewById(year);
            if(yearPicker != null){
                yearPicker.setVisibility(View.GONE);
            }
        }
    }
};
return dlg;
Run Code Online (Sandbox Code Playgroud)

  • 它在Android 5.1中找不到我的年份:( (3认同)