[Android]只显示月和日的DatePickerDialog

前言

 需求要只显示月和日的日历控件,又不想自定义控件,最简单的办法就是隐藏显示年的这个框了,但DatePickerDialog并没有直接提供方法来操作,这里分享一个笨办法:)

 

声明

  欢迎转载,但请保留文章原始出处:) 

    51CTO:http://over140.blog.51cto.com

 

正文

  一、效果图

    1.1 默认

 

    1.2 处理后 

 

 

  二、实现代码

    2.1  代码片段1

  
  
  
  
  1. /** 
  2.  * 从当前Dialog中查找DatePicker子控件 
  3.  *  
  4.  * @param group 
  5.  * @return 
  6.  */ 
  7. private DatePicker findDatePicker(ViewGroup group) { 
  8.     if (group != null) { 
  9.         for (int i = 0, j = group.getChildCount(); i < j; i++) { 
  10.             View child = group.getChildAt(i); 
  11.             if (child instanceof DatePicker) { 
  12.                 return (DatePicker) child; 
  13.             } else if (child instanceof ViewGroup) { 
  14.                 DatePicker result = findDatePicker((ViewGroup) child); 
  15.                 if (result != null
  16.                     return result; 
  17.             } 
  18.         } 
  19.     } 
  20.     return null
  21.  
  22. }  
      代码说明:
通过断点也看到Dialog的ContentView里有DatePicker子控件,这里通过遍历的办法来查找这个控件。

 

    2.2  使用代码

  
  
  
  
  1. final Calendar cal = Calendar.getInstance(); 
  2. mDialog = new CustomerDatePickerDialog(getContext(), this
  3.     cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), 
  4.     cal.get(Calendar.DAY_OF_MONTH)); 
  5. mDialog.show(); 
  6.  
  7. DatePicker dp = findDatePicker((ViewGroup) mDialog.getWindow().getDecorView()); 
  8. if (dp != null) { 
  9.     ((ViewGroup) dp.getChildAt(0)).getChildAt(0).setVisibility(View.GONE); 
  10.  
  11. }  

      代码说明:

        通过源码可以看得到DatePicker内置三个NumberPicker控件,依次表示年、月、日,隐藏掉第一个即可。

 

 

    三、补充

      后续使用中发现标题栏也要改,通过查看DatePickerDialog源码,需要自定义并实现onDateChanged方法才可实现,如下代码:

   
   
   
   
  1. class CustomerDatePickerDialog extends DatePickerDialog { 
  2.  
  3.     public CustomerDatePickerDialog(Context context, 
  4.             OnDateSetListener callBack, int year, int monthOfYear, 
  5.             int dayOfMonth) { 
  6.         super(context, callBack, year, monthOfYear, dayOfMonth); 
  7.     } 
  8.  
  9.     @Override 
  10.     public void onDateChanged(DatePicker view, int year, int month, int day) { 
  11.         super.onDateChanged(view, year, month, day); 
  12.         mDialog.setTitle((month + 1) + "月" + day + "日"); 
  13.     } 

 

 

你可能感兴趣的:(android,移动开发,Datepicker,show,day,only,month,只显示年月)