[Android]只显示月和日的DatePickerDialog
16lz
2021-01-26
[Android]只显示月和日的DatePickerDialog
前言
需求要只显示月和日的日历控件,又不想自定义控件,最简单的办法就是隐藏显示年的这个框了,但DatePickerDialog并没有直接提供方法来操作,这里分享一个笨办法:)
声明
欢迎转载,但请保留文章原始出处:)
博客园:http://www.cnblogs.com
农民伯伯: http://over140.cnblogs.com正文
一、效果图
1.1 默认
1.2 处理后
二、实现代码
2.1 代码片段1
/***从当前Dialog中查找DatePicker子控件
*
* @param group
* @return
*/
private DatePickerfindDatePicker(ViewGroupgroup){
if (group != null ){
for ( int i = 0 ,j = group.getChildCount();i < j;i ++ ){
Viewchild = group.getChildAt(i);
if (child instanceof DatePicker){
return (DatePicker)child;
} else if (child instanceof ViewGroup){
DatePickerresult = findDatePicker((ViewGroup)child);
if (result != null )
return result;
}
}
}
return null ;
}
代码说明:通过断点也看到Dialog的ContentView里有DatePicker子控件,这里通过遍历的办法来查找这个控件。
2.2 使用代码
mDialog = new CustomerDatePickerDialog(getContext(), this ,
cal.get(Calendar.YEAR),cal.get(Calendar.MONTH),
cal.get(Calendar.DAY_OF_MONTH));
mDialog.show();
DatePickerdp = findDatePicker((ViewGroup)mDialog.getWindow().getDecorView());
if (dp != null ){
((ViewGroup)dp.getChildAt( 0 )).getChildAt( 0 ).setVisibility(View.GONE);
}
代码说明:
通过源码可以看得到DatePicker内置三个NumberPicker控件,依次表示年、月、日,隐藏掉第一个即可。
三、补充
后续使用中发现标题栏也要改,通过查看DatePickerDialog源码,需要自定义并实现onDateChanged方法才可实现,如下代码:
class CustomerDatePickerDialog extends DatePickerDialog{public CustomerDatePickerDialog(Contextcontext,
OnDateSetListenercallBack, int year, int monthOfYear,
int dayOfMonth){
super (context,callBack,year,monthOfYear,dayOfMonth);
}
@Override
public void onDateChanged(DatePickerview, int year, int month, int day){
super .onDateChanged(view,year,month,day);
mDialog.setTitle((month + 1 ) + " 月 " + day + " 日 " );
}
}
更多相关文章
- android TabHost(选项卡)的使用方法发布
- Android(安卓)7.0 AES加密报错:NoSuchProviderException: no such
- Android开发历程_6(RadioButton和CheckBox的使用)
- 【总结】Mac版Android(安卓)Studio常用快捷键总结
- Intent详解
- VMware下Android(安卓)x86无声音的解决办法
- Android学习笔记_4_单元测试
- 支付宝转账小demo(不需要库)
- 认识 android 中的 LayoutInflater