从datepicker隐藏日期

时间:2013-02-06 14:48:16

标签: android

我需要从datepicker中隐藏day字段,我发现了这个方法,但问题出在Android 2.3.3的版本中,工作正常,但在android的版本4x中没有隐藏day字段。我猜是库“ java.lang.reflect.Field ”已经过时,但我不确定。

我找到了这个解决方案here

可能会在这里?

final DatePicker datePicker = new DatePicker(this);                                     
                LLayout.addView(datePicker);

                hideDayField(datePicker, "mDayPicker");


    private void hideDayField(DatePicker datePicker, String name) {
    try {
        java.lang.reflect.Field field = DatePicker.class.getDeclaredField(name);
        field.setAccessible(true);
        View fieldInstance = (View) field.get(datePicker);
        fieldInstance.setVisibility(View.GONE);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

2 个答案:

答案 0 :(得分:2)

你正在采用的方法使用反射来混淆DatePicker - 类的一些隐藏字段。这个问题是,当一个类的内部发生变化时(例如你正在改变的字段的名称),这将不再起作用。

请参阅the Docs on Reflection

在您的关联问题中,提供了一些其他选项,可能更适合。

答案 1 :(得分:1)

我做了类似隐藏日期和月份的事情,找到了解决方案here

try {
    java.lang.reflect.Field[] f = picker.getClass().getDeclaredFields();
    for (java.lang.reflect.Field field : f) {
        if (field.getName().equals("mDayPicker") || field.getName().equals("mDaySpinner")
           || field.getName().equals("mMonthPicker") || field.getName().equals("mMonthSpinner")) {
           field.setAccessible(true);
           Object dmPicker = new Object();
           dmPicker = field.get(picker);
           ((View) dmPicker).setVisibility(View.GONE);
        }
    }
}

希望它有所帮助。