[Android]只显示月和日的DatePickerDialog

简介:

前言

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

 

声明

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

    博客园:http://www.cnblogs.com

    农民伯伯: http://over140.cnblogs.com   

 

正文

  一、效果图

    1.1 默认

 

    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

目录
相关文章
|
数据处理 Android开发
关于安卓glide加载显示进度
安卓glide加载显示进度
340 0
|
Android开发 C++
Android OpenGL显示任意3D模型文件
Android OpenGL显示任意3D模型文件
Android OpenGL显示任意3D模型文件
|
存储 缓存 Java
Android OpenGL 显示基本图形及相关概念解读
Android OpenGL 显示基本图形及相关概念解读
Android OpenGL 显示基本图形及相关概念解读
|
开发工具 Android开发
Android studio preview不显示
作为一个刚学习Android的小白,装Android studio的过程中就遇到了不少问题,这两天发现preview一直不显示,百度查了一下,很多教程都只是改了一下这里,但是治标不治本啊,新的项目又会出现这个问题。
224 0
Android studio preview不显示
|
XML 缓存 Android开发
Android Studio Dolphin | 2021.3.1不显示布局XML预览
Android Studio Dolphin | 2021.3.1不显示布局XML预览
1971 0
Android Studio Dolphin | 2021.3.1不显示布局XML预览
|
XML SQL 缓存
Android 音乐APP(四)显示专辑图片、本地数据库、自定义通知栏样式、通知栏显示
Android 音乐APP(四)显示专辑图片、本地数据库、自定义通知栏样式、通知栏显示
396 0
Android 音乐APP(四)显示专辑图片、本地数据库、自定义通知栏样式、通知栏显示
|
XML Android开发 数据格式
Android Glide加载网络图片不显示,但用网页打开又正常显示
Android Glide加载网络图片不显示,但用网页打开又正常显示
624 0
Android Glide加载网络图片不显示,但用网页打开又正常显示
|
XML 缓存 API
Android 天气APP(十四)修复UI显示异常、优化业务代码逻辑、增加详情天气显示
Android 天气APP(十四)修复UI显示异常、优化业务代码逻辑、增加详情天气显示
187 0
Android 天气APP(十四)修复UI显示异常、优化业务代码逻辑、增加详情天气显示
|
Android开发
Android 天气APP(六)旋转风车显示风力、风向
Android 天气APP(六)旋转风车显示风力、风向
149 0
Android 天气APP(六)旋转风车显示风力、风向
|
XML Android开发 数据格式
Android控件显示、隐藏时,增加动画效果
Android控件显示、隐藏时,增加动画效果
450 0
Android控件显示、隐藏时,增加动画效果