【问题标题】:How to display date picker for android with only month and year fields?如何仅显示月份和年份字段的 android 日期选择器?
【发布时间】:2011-05-06 14:15:46
【问题描述】:

我想禁用 android sdk 日期选择器上的日期选择选项。任何简单的 xml 配置都是最好的

【问题讨论】:

  • 你有没有尝试过?您是否使用搜索引擎搜索过解决方案?
  • 我确实做到了,发现人们说这是不可能的,这不是真的,但我对如何推进这一点并没有明确的想法,但它是可能的。谢谢

标签: android sdk datepicker


【解决方案1】:

我刚刚发布了一个新的日期选择器框架,它允许您创建自定义日期选择器。我还提供了一些示例日期选择器,例如您正在寻找的日期选择器。希望它对你有用。

代码可以在这里找到:https://github.com/bendemboski/DateSlider

2014 年 6 月更新: 这个库是 2010 年开发的,自 2011 年以来一直无人维护。所以它现在很可能已经过时了。

【讨论】:

  • 自定义日期选择器是 a-w-s-o-m-e
  • 哦,维护 Wordpress 页面的乐趣...我更新了指向 GitHub 存储库的链接
  • 它仍然相关吗?您能否更新项目以支持 gradle 和 android studio?
  • 它可能不再相关了。该项目是在 Android 2.3 新版本时开发的。并且从那以后一直没有更新。所以希望有更好的解决方案。我不再开发 android 应用程序,所以我完全不了解现代实践。 =/
【解决方案2】:

可以使用反射破解 DatePicker 实例。这样,您就可以访问代表 DatePicker 中日期的 NumberPicker 实例:

datePicker = (DatePicker) findViewById(R.id.expiration_date);
try {
    Field f[] = datePicker.getClass().getDeclaredFields();
    for (Field field : f) {
        if (field.getName().equals("mDayPicker")) {
            field.setAccessible(true);
            Object dayPicker = new Object();
            dayPicker = field.get(datePicker);
            ((View) dayPicker).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());
}

【讨论】:

  • 这对我有用。请注意,我必须将 mDayPicker 更改为 mDaySpinner。我不确定在哪个 API 级别引入了此更改,但我现在正在为 android 4.0.3 构建。
  • 这可能在 Android 5.0 及更高版本中被破坏,因为 DatePicker 不再使用这些数字选择器!
  • 在 Android 6 上,字段为 mDelegate、LOG_TAG、MODE_CALENDAR、MODE_SPINNER。该解决方案对我不起作用。
【解决方案3】:

说到反射,这适用于 Android 4.4.2 SDK

"mDaySpinner"

改为

"mDayPicker"

【讨论】:

    【解决方案4】:

    我认为这是最好的解决方案

      datePicker.findViewById(Resources.getSystem().getIdentifier("day", "id", "android")).setVisibility(View.GONE);
    

    【讨论】:

      【解决方案5】:

      编辑:根据下面的评论,我不会再关注这个答案了。

      我认为您不能使用默认日期选择器来做到这一点。您必须使用基本的 Android UI 元素来创建它。但是,与其去那个麻烦,不如使用更好的库元素,比如这个漂亮的 iPhone 式轮子:http://code.google.com/p/android-wheel/我还没有使用它,但我打算!

      【讨论】:

      【解决方案6】:

      这在 2.2 版本中运行良好。但是对话框的标题没有改变。

      for (Field datePickerDialogField : datePickerDialogFields) {           
      
          if (datePickerDialogField.getName().equals("mDatePicker")) {
              datePickerDialogField.setAccessible(true);
              DatePicker datePicker = (DatePicker) datePickerDialogField.get(datePickerDialog);
      
              Field datePickerFields[] = datePickerDialogField.getType().getDeclaredFields();
      
              for (Field datePickerField : datePickerFields) {
      
                  if ("mDayPicker".equals(datePickerField.getName())) {
                      datePickerField.setAccessible(true);
                      Object dayPicker = new Object();
                      dayPicker = datePickerField.get(datePicker);
                      ((View) dayPicker).setVisibility(View.GONE);
                  }
              }
          }
      }
      

      【讨论】:

        【解决方案7】:

        您可以使用 https://github.com/SimonVT/android-datepicker 小部件来实现向后移植的兼容性,并使日期选择器“消失”

        <net.simonvt.numberpicker.NumberPicker
                android:id="@+id/day"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="16dip"
                android:layout_marginRight="16dip"
                android:focusable="true"
                android:focusableInTouchMode="true"
                android:visibility="gone"
                />
        

        【讨论】:

          【解决方案8】:

          隐藏日:

           datePicker.findViewById(Resources.getSystem().getIdentifier("day", "id", "android")).setVisibility(View.GONE);
          

          &

          隐藏月份:

          datePicker.findViewById(Resources.getSystem().getIdentifier("month", "id", "android")).setVisibility(View.GONE);
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-02-22
            • 1970-01-01
            • 2012-01-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-02-26
            相关资源
            最近更新 更多