显示带有或不带年份字段的DatePicker

问题描述:

根据复选框,我想显示一个DatePicker,其中year字段可见或不可见。显示带有或不带年份字段的DatePicker

但我没有找到任何给我一种实现它的方法。

有什么想法吗?

在此先感谢。

+0

据我所知,这是不可能的,至少在Android sdk 1.5 – Jorgesys 2010-05-10 15:21:21

+0

我认为你会浪费通过自己编写DatePicker来满足您的所有需求。 – Cristian 2010-05-10 15:26:43

+0

这是一个有点棘手的要求,因为可用的日期因年而异。建议考虑编写自己的版本(至少在年份不可见版本中)可能是好的。 – Adrian 2010-05-10 15:43:37

由于无法从DatePicker中删除年份字段,我最终决定添加一个CheckBox“忽略年份字段”以实施解决方案。

我认为Any+Time™ DatePicker/TimePicker AJAX Calendar Widget可能适合你。它有能力选择使用哪些字段,并且有朋友告诉我,在他的Android手机上它运行良好。只需测试复选框是否已选中,然后使用格式字符串创建选择器,该格式字符串相应地包含或不包含年份说明符。

+0

谢谢,但我不想混用我的代码与JavaScript,我认为这会使我的应用程序太复杂。 – tbruyelle 2010-05-11 13:20:54

看看DateSlider,这是一个很好的,可定制的DatePicker替代品。

+0

固定.......... – 2013-03-01 01:02:15

+0

固定......... +1 – JoxTraex 2013-03-01 01:14:46

设置复选框听者您需要查看复选框的

if(id == R.id.event_checkBox_year) 
    { 
     if(ch.isChecked()) 
     { 
      visiblity = View.GONE; 
     } 
     else 
     { 
      visiblity = View.VISIBLE; 
     } 
     showHideYear(visiblity); 
    } 

private void showHideYear(int visiblity) 
{ 
    try { 
      Field f[] = date.getClass().getDeclaredFields(); 
      for (Field field : f) { 
       if (field.getName().equals("mYearSpinner") ||field.getName().equals("mYearPicker")) 
       { 
        field.setAccessible(true); 
        Object yearPicker = new Object(); 
        yearPicker = field.get(date); 
        ((View) yearPicker).setVisibility(visiblity); 
       } 
      } 
     } catch (SecurityException e) 
     { 
      Log.d("ERROR", e.getMessage()); 
     } 
     catch (IllegalArgumentException e) 
     { 
      Log.d("ERROR", e.getMessage()); 
     } catch (IllegalAccessException e) 
     { 
      Log.d("ERROR", e.getMessage()); 
     } 
} 

下面是没有出现在日期选择器对话框一年微调或年选择器的解决方案

try { 

     Field f[] = datePickerDialog.getClass().getDeclaredFields(); 
     for (Field field : f) { 
      if (field.getName().equals("mDatePicker")) { 
       field.setAccessible(true); 
       Object datePicker=new Object(); 
       datePicker=field.get(datePickerDialog); 
       Field[] fields=datePicker.getClass().getDeclaredFields(); 
       for(Field field1:fields){ 
        if(field1.getName().equals("mYearSpinner") || field1.getName().equals("mYearPicker")){ 
         field1.setAccessible(true); 
         Object ye=field1.get(datePicker); 
         ((View)ye).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()); 
    } 

一个内胆:

getDatePicker().findViewById(Resources.getSystem().getIdentifier("year", "id", "android")).setVisibility(View.GONE);