最近几天再做一个App开发,开发时需要使用DatePickerDialog来只显示年月,在网上参考了不少的例子,有的自己琢磨不透,所幸看到了(这里请参考http://whb198900.blog.163.com/blog/static/766453542012108111920879)这位朋友的文章以及http://download.csdn.net/detail/u010372772/6027761这里边的代码,自己又进行了总结,总之,完成了自己的任务。

  1 public class SecondActivity extends Activity implements OnClickListener {
  2     /** Called when the activity is first created. */
  3     private Button button;
  4     private EditText textview;
  5     private Dialog mdialog;
  6     private Calendar calendar = null;
  7 
  8     @Override
  9     public void onCreate(Bundle savedInstanceState) {
 10         super.onCreate(savedInstanceState);
 11         requestWindowFeature(Window.FEATURE_NO_TITLE);
 12         setContentView(R.layout.second);
 13 
 14         initUi();
 15         button.setOnClickListener(this);
 16     }
 17 
 18     public void initUi() {
 19         button = (Button) findViewById(R.id.show);
 20         textview = (EditText) findViewById(R.id.editText);
 21     }
 22 
 23     @Override
 24     public void onClick(View v) {
 25         // TODO Auto-generated method stub
 26         showDialog(0);// 日期弹出框
 27         int SDKVersion = SecondActivity.this.getSDKVersionNumber();// 获取系统版本
 28         System.out.println("SDKVersion = " + SDKVersion);
 29         DatePicker dp = findDatePicker((ViewGroup) mdialog.getWindow()
 30                 .getDecorView());// 设置弹出年月日
 31         if (dp != null) {
 32             if (SDKVersion < 11) {
 33                 ((ViewGroup) dp.getChildAt(0)).getChildAt(1).setVisibility(
 34                         View.GONE);
 35             } else if (SDKVersion > 14) {
 36                 //只显示年月
 37                 ((ViewGroup) ((ViewGroup) dp.getChildAt(0)).getChildAt(0))
 38                         .getChildAt(1).setVisibility(View.GONE);//.getChildAt(0)
 39                 //只显示年日
 40 //                ((ViewGroup) ((ViewGroup) dp.getChildAt(0)).getChildAt(0))
 41 //                .getChildAt(2).setVisibility(View.GONE);
 42                 //只显示年月
 43 //                ((ViewGroup) ((ViewGroup) dp.getChildAt(0)).getChildAt(0))
 44 //                .getChildAt(1).setVisibility(View.GONE);
 45                 //显示月日
 46 //                ((ViewGroup) ((ViewGroup) dp.getChildAt(0)).getChildAt(0))
 47 //                .getChildAt(0).setVisibility(View.GONE);
 48             }
 49         }
 50 
 51     }
 52 
 53     @Override
 54     protected Dialog onCreateDialog(int id) { // 对应上面的showDialog(0);//日期弹出框
 55         mdialog = null;
 56         switch (id) {
 57         case 0:
 58             calendar = Calendar.getInstance();
 59             mdialog = new DatePickerDialog(this,
 60                     new DatePickerDialog.OnDateSetListener() {
 61                         @Override
 62                         public void onDateSet(DatePicker view, int year,
 63                                 int monthOfYear, int dayOfMonth) {
 64                             textview.setText(year + "-" + (monthOfYear));
 65                         }
 66                     }, calendar.get(Calendar.YEAR),
 67                     calendar.get(Calendar.MONTH),
 68                     calendar.get(Calendar.DAY_OF_MONTH));
 69             break;
 70         }
 71         return mdialog;
 72     }
 73 
 74     /**
 75      * 从当前Dialog中查找DatePicker子控件
 76      * 
 77      * @param group
 78      * @return
 79      */
 80     private DatePicker findDatePicker(ViewGroup group) {
 81         if (group != null) {
 82             for (int i = 0, j = group.getChildCount(); i < j; i++) {
 83                 View child = group.getChildAt(i);
 84                 if (child instanceof DatePicker) {
 85                     return (DatePicker) child;
 86                 } else if (child instanceof ViewGroup) {
 87                     DatePicker result = findDatePicker((ViewGroup) child);
 88                     if (result != null)
 89                         return result;
 90                 }
 91             }
 92         }
 93         return null;
 94     }
 95 
 96     /**
 97      * 获取系统SDK版本
 98      * 
 99      * @return
100      */
101     public static int getSDKVersionNumber() {
102         int sdkVersion;
103         try {
104             sdkVersion = Integer.valueOf(android.os.Build.VERSION.SDK);
105         } catch (NumberFormatException e) {
106             sdkVersion = 0;
107         }
108         return sdkVersion;
109     }
110 }


有什么不足之处,请多多指教!!!2015-3-30

posted on 2015-03-30 14:22  奋斗Ing。。。  阅读(2404)  评论(0编辑  收藏  举报