android指定DatePickerDialog样式并不显示年的实现代码
作者:jingxian 时间:2022-07-13 05:23:08
有很多地方要用到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)就是获取了当前实例所拥有的这个字段值,当然就是显示的这个“年”了,就可以对这个进行操作了,而我只需要隐藏就可以了。有网上看了有些说通过布局来一层层获取,这种方法可读性不高,而且不同的版本改动而已的可能性很大,这样就获取不到这个“年”了,相对来说,改动这个字段名的可能性应该会小些。
结束,这只是提供一种思路,可能还有更好的办法,大神勿喷!
标签:datepickerdialog样式
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Unity计时器功能实现示例
2022-03-08 20:02:39
![](https://img.aspxhome.com/file/2023/8/88408_0s.gif)
Java调用Oracle存储过程详解
2022-09-09 03:19:45
Springboot公共字段填充及ThreadLocal模块改进方案
2023-11-17 22:58:39
![](https://img.aspxhome.com/file/2023/4/59184_0s.png)
Spring的异常重试框架Spring Retry简单配置操作
2023-11-25 18:27:35
SpringBoot如何优雅的整合Swagger Api自动生成文档
2022-08-10 00:49:29
![](https://img.aspxhome.com/file/2023/3/72343_0s.png)
基于Java代码实现支付充值的通用流程
2021-09-04 00:48:45
Java内存模型JMM与volatile
2022-03-25 09:33:50
![](https://img.aspxhome.com/file/2023/4/62204_0s.png)
Java中使用内存映射实现大文件上传实例
2022-01-16 05:02:16
Mybatis实现插入数据后返回主键过程解析
2022-07-14 18:43:15
Spring5新功能@Nullable注解及函数式注册对象
2021-10-27 05:49:44
![](https://img.aspxhome.com/file/2023/8/79918_0s.png)
Java 详解包装类Integer与int有哪些共通和不同
2022-06-15 20:12:18
Unity 从Resources中动态加载Sprite图片的操作
2023-08-26 11:37:18
C#中面向对象编程机制之多态学习笔记
2023-12-06 20:16:33
使用Spring Data Redis实现数据缓存的方法
2021-08-02 10:19:25
![](https://img.aspxhome.com/file/2023/6/71706_0s.png)
java开发BeanUtils类解决实体对象间赋值
2022-08-25 06:31:25
![](https://img.aspxhome.com/file/2023/0/68150_0s.png)
Java中比较抽象类与接口的异同
2023-09-24 01:50:40
Spring Boot加密配置文件特殊内容的示例代码详解
2023-09-18 08:47:24
![](https://img.aspxhome.com/file/2023/2/64022_0s.jpg)
RestTemplate自定义请求失败异常处理示例解析
2021-12-03 22:13:17
![](https://img.aspxhome.com/file/2023/0/60700_0s.png)
c#实现服务器性能监控并发送邮件保存日志
2023-09-10 11:56:14
java中的JsonSerializer用法,前后端单位转换必备
2022-05-01 07:58:48
![](https://img.aspxhome.com/file/2023/4/64904_0s.jpg)