在Android DatePicker中隐藏年份字段?

kir*_*882 14 android datepicker

我正在使用一个基本的DatePicker,我正在试图弄清楚如何在DatePickerDialog上隐藏Year字段,以便只显示Month和Day.我不介意今年的基础代码仍然存在,我只想在对话框中隐藏年份字段.你知道的事情如下:

((View) myYear).setVisibility(View.GONE);
Run Code Online (Sandbox Code Playgroud)

我知道这不起作用,因为myYear是一个int而不是一个视图,但是沿着这些方向.可能吗?

kir*_*882 22

我发现实现DatePicker的一种非常简单的方法是在xml中调用它:

    <DatePicker
    android:id="@+id/thePicker"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>
Run Code Online (Sandbox Code Playgroud)

然后在java中隐藏你想要的任何字段(在本例中为年份):

    picker = (DatePicker) findViewById(R.id.thePicker);
    try {
        Field f[] = picker.getClass().getDeclaredFields();
        for (Field field : f) {
            if (field.getName().equals("mYearPicker")) {
                field.setAccessible(true);
                Object yearPicker = new Object();
                yearPicker = field.get(picker);
                ((View) yearPicker).setVisibility(View.GONE);
            }
        }
    } 
    catch (SecurityException e) {
        Log.d("ERROR", e.getMessage());
    } 
    catch (IllegalArgumentException e) {
        Log.d("ERROR", e.getMessage());
    } 
    catch (IllegalAccessException e) {
        Log.d("ERROR", e.getMessage());
    }
Run Code Online (Sandbox Code Playgroud)

  • 你可以用`if(field.getName().equals("mYearPicker")|| field.getName()替换`if(field.getName().equals("mYearPicker")){`.equals("mYearSpinner" )){`来考虑Honeycomb及更高版本Android中的DatePicker小部件... (12认同)
  • 最新的Androids,也隐藏"mCalendarView" (2认同)

ron*_*tho 9

要非常小心这个解决方案.您正在使用反射来访问字段并更改可见性.这不适用于Android 5.0!Google已经更改了TimePicker和DatePicker的实现,并且这些类不再公开来自委托的任何字段appart.

我不知道Android 5.0 +的解决方案.我会尽快通知你发现一些有趣的东西.

作为一个想法,您可以使用Build.VERSION.SDK_INT检查Android版本,然后尝试使用反射访问DatePickerSpinnerDelegate并设置所需的字段.

同样,这不是理想的解决方案,因为谷歌可以一次又一次地自由改变......