前言
需求要隻顯示月和日的月曆控件,又不想自定義控件,最簡單的辦法就是隐藏顯示年的這個框了,但datepickerdialog并沒有直接提供方法來操作,這裡分享一個笨辦法:)
聲明
歡迎轉載,但請保留文章原始出處:)
部落格園:http://www.cnblogs.com
農民伯伯: http://over140.cnblogs.com
正文
一、效果圖
1.1 預設
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcuEzX5ETL50SMxAjMvwVOvwVMxAjMvwFM0EjclZ3bvwVbvN2Xzd2bsJmbj9CXt92YuM3ZvxmYuNmLzV2Zh1Wavw1LcpDc0RHaiojIsJye.png)
1.2 處理後
二、實作代碼
2.1 代碼片段1
/**
* 從目前dialog中查找datepicker子控件
*
* @param group
* @return
*/
private datepicker finddatepicker(viewgroup group) {
if (group != null) {
for (int i = 0, j = group.getchildcount(); i < j; i++) {
view child = group.getchildat(i);
if (child instanceof datepicker) {
return (datepicker) child;
} else if (child instanceof viewgroup) {
datepicker result = finddatepicker((viewgroup) child);
if (result != null)
return result;
}
}
}
return null;
}
代碼說明:
通過斷點也看到dialog的contentview裡有datepicker子控件,這裡通過周遊的辦法來查找這個控件。
2.2 使用代碼
final calendar cal = calendar.getinstance();
mdialog = new customerdatepickerdialog(getcontext(), this,
cal.get(calendar.year), cal.get(calendar.month),
cal.get(calendar.day_of_month));
mdialog.show();
datepicker dp = 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(context context,
ondatesetlistener callback, int year, int monthofyear,
int dayofmonth) {
super(context, callback, year, monthofyear, dayofmonth);
@override
public void ondatechanged(datepicker view, int year, int month, int day) {
super.ondatechanged(view, year, month, day);
mdialog.settitle((month + 1) + "月" + day + "日");
}
轉載:http://www.cnblogs.com/over140/archive/2011/09/20/2181532.html