在Android DatePicker中隐藏年份字段?

时间:2012-05-01 17:51:06

标签: android datepicker

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

((View) myYear).setVisibility(View.GONE);

我知道它不起作用,因为myYear是一个int而不是一个View,但是沿着这些方向。有可能吗?

5 个答案:

答案 0 :(得分:22)

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

    <DatePicker
    android:id="@+id/thePicker"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

然后在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());
    }

答案 1 :(得分:8)

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

我还不知道Android 5.0 +的解决方案。我会在发现一些有趣内容后立即通知您。

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

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

答案 2 :(得分:0)

在日期选择器中禁用年份字段的简便方法

DatePicker dp = findDatePicker((ViewGroup) dialog.getWindow().getDecorView());

if(dp != null) 
{
    ((ViewGroup) ((ViewGroup) dp.getChildAt(0)).getChildAt(0)).getChildAt(2).setEnabled(false);
    ((ViewGroup) ((ViewGroup) dp.getChildAt(0)).getChildAt(0)).getChildAt(2).setAlpha(0.4f);
}

如果你想删除年份字段,只需将结果视图设置为View.GONE,如下所示

dp.getChildAt(0)).getChildAt(0)).getChildAt(2).setVisibility(View.GONE)



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;

}

我已在下面提到链接以供参考 Remove year from DatePickerDialog

答案 3 :(得分:0)

您可以使用此功能设置年份范围

public function rawQuery()
{
         $data = 'SELECT * FROM "w8_w8shipment"';

         $resultado = DB::select(DB::raw($data));

         return response()->json(['status' => 'success', 'data' => $resultado], '200');
}

答案 4 :(得分:-1)

最近通过将日期选择器宽度设置得太小来隐藏对话框的年份部分。

<DatePicker
        android:id="@+id/month_day_datepicker"
        android:layout_width="140dp"
        android:datePickerMode="spinner"
        style="?android:attr/borderlessButtonStyle"/>

让我知道这是否行得通,显然,绑定中有可访问的年份,但是在计算日期时您无法选择该年份。