android指定DatePickerDialog样式并不显示年的实现代码

 更新时间:2016年08月05日 14:49:27   投稿:jingxian  
下面小编就为大家带来一篇android指定DatePickerDialog样式并不显示年的实现代码。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧,祝大家游戏愉快哦

有很多地方要用到DatePickerDialog。但有时项目用到的主题样式是很丑的样式,显示出来的真丑。


而我们真正想要的样式是这样的。


这个就漂亮多了。而且很多的时候都不需要显示“年”,下面看通过指定主题来显示自己想要的样式,并且通过反射机制来隐藏“年”,而且可以举一反三,对这上面的东西做任务的修改。

 private void showDatePickerDialog() {
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(new Date());
    int year = calendar.get(Calendar.YEAR);
    final int month = calendar.get(Calendar.MONTH);
    int day = calendar.get(Calendar.DAY_OF_MONTH);

    DatePickerDialog datePickerDialog = new DatePickerDialog(getActivity(), AlertDialog.THEME_HOLO_LIGHT, onDateSetListener, year, month, day);
    datePickerDialog.setCancelable(true);
    DatePicker dp = datePickerDialog.getDatePicker();
    //设置当天为最小值
    dp.setMinDate(calendar.getTimeInMillis());
    //设置最大值是7天
    calendar.set(Calendar.DAY_OF_MONTH, day + 6);
    dp.setMaxDate(calendar.getTimeInMillis());
    try {
      //获取指定的字段
      Field field = dp.getClass().getDeclaredField("mYearSpinner");
      //解封装
      field.setAccessible(true);
      //获取当前实例的值
      NumberPicker np = ((NumberPicker) field.get(dp));
      np.setVisibility(View.GONE);
    } catch (NoSuchFieldException e) {
      e.printStackTrace();
    } catch (IllegalAccessException e) {
      e.printStackTrace();
    }
    datePickerDialog.show();

  }

在实例化DatePickerDialog的时候,第二个参数指定了主题为THEME_HOLO_LIGHT就是想要的样式,而且有一个很好玩的地方,你可以传任何类型为int的值,来看看你手机支持哪些乱七八糟的主题,当然这只是玩下,还是正规点写上这个指定主题。

try{}catch(){}里面开始使用反射来获取“年”的布局,因为源码里年的这个字段使用了private修饰,而且没有get方法提供,所以要用getDeclareField()来获取这个Field.然后解封装,否则也是获取不到的,也就是setAccessible(true),意思就是可访问了,这个时候获取到的还不是当前实例的值,只是得到了这个类里面的一个字段信息,最后一句,filed.get(Object)就是获取了当前实例所拥有的这个字段值,当然就是显示的这个“年”了,就可以对这个进行操作了,而我只需要隐藏就可以了。有网上看了有些说通过布局来一层层获取,这种方法可读性不高,而且不同的版本改动而已的可能性很大,这样就获取不到这个“年”了,相对来说,改动这个字段名的可能性应该会小些。

结束,这只是提供一种思路,可能还有更好的办法,大神勿喷!

以上这篇android指定DatePickerDialog样式并不显示年的实现代码就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • kotlin中的数据转换方法(示例详解)

    kotlin中的数据转换方法(示例详解)

    这篇文章介绍了Kotlin中将数字转换为字符串和字符串转换为数字的多种方法,包括使用`toString()`、字符串模板、格式化字符串、处理可空类型等,同时,也详细讲解了如何安全地进行字符串到数字的转换,并处理了不同进制和本地化格式的字符串转换,感兴趣的朋友一起看看吧
    2025-03-03
  • Android编程实现调用相册、相机及拍照后直接裁剪的方法

    Android编程实现调用相册、相机及拍照后直接裁剪的方法

    这篇文章主要介绍了Android编程实现调用相册、相机及拍照后直接裁剪的方法,涉及Android拍照及图形处理相关操作技巧,需要的朋友可以参考下
    2017-02-02
  • Android   Data Binding 在 library module 中遇到错误及解决办法

    Android   Data Binding 在 libra

    这篇文章主要介绍了Android   Data Binding 在 library module 中遇到错误及解决办法的相关资料,需要的朋友可以参考下
    2017-03-03
  • Android实现双模(CDMA/GSM)手机短信监听的方法

    Android实现双模(CDMA/GSM)手机短信监听的方法

    这篇文章主要介绍了Android实现双模(CDMA/GSM)手机短信监听的方法,涉及Android短信的原理与相关操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2016-06-06
  • 使用 Lambda 取代 Android 中的匿名类

    使用 Lambda 取代 Android 中的匿名类

    本文主要介绍使用Lambda 取代 Android 中的匿名类的资料,这里这里了相关资料及简单示例代码帮助大家学习参考此部分的知识,有需要的小伙伴可以参考下
    2016-09-09
  • Android文件操作工具类详解

    Android文件操作工具类详解

    这篇文章主要为大家详细介绍了Android文件操作工具类,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-07-07
  • Android软件启动动画及动画结束后跳转的实现方法

    Android软件启动动画及动画结束后跳转的实现方法

    这篇文章主要介绍了Android软件启动动画及动画结束后跳转的实现方法,实例分析了Android图片播放及定时器的相关使用技巧,非常具有使用价值,需要的朋友可以参考下
    2015-10-10
  • Android学习之AppWidget高级效果

    Android学习之AppWidget高级效果

    这篇文章主要为大家详细介绍了Android学习之AppWidget高级效果的相关资料,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • Android设备adb连接后显示device unauthorized解决方案

    Android设备adb连接后显示device unauthorized解决方案

    这篇文章主要为大家介绍了Android设备adb连接后显示device unauthorized解决方案详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • Android实现购物车添加商品动画

    Android实现购物车添加商品动画

    这篇文章主要为大家详细介绍了Android实现购物车添加商品动画,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06

最新评论