【问题标题】:Displaying a DatePicker with or without the year field显示带或不带年份字段的 DatePicker
【发布时间】:2010-05-10 15:11:04
【问题描述】:

我想根据复选框显示DatePicker,其中年份字段是否可见。

但我没有找到任何可以实现它的方法。

有什么想法吗?

提前致谢。

【问题讨论】:

  • 据我所知,至少在 Android sdk 1.5 中这是不可能的
  • 我认为您可以通过自己编写适合您所有需求的 DatePicker 来减少浪费的时间。
  • 这是一个有点棘手的要求,因为可用日期因年份而异......考虑编写自己的版本(至少对于年份不可见的版本)的建议是可能不错。
  • @Casidiablo:编写自己的 DatePicker 比听起来要困难得多。您不仅需要处理不同的日历问题(例如闰年),而且使用的 NumberPicker 小部件是一个私有 API。
  • 为什么 NumberPicker 是私有的,太可惜了...

标签: android datepicker


【解决方案1】:

将复选框监听器设置为您需要查看的复选框

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      这是在日期选择器对话框中不显示年份微调器或年份选择器的解决方案

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

      【讨论】:

        【解决方案4】:

        一个班轮:

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

        【讨论】:

          猜你喜欢
          • 2021-12-31
          • 2022-07-25
          • 1970-01-01
          • 2012-02-13
          • 1970-01-01
          • 2018-06-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多