你的位置:首页 > 操作系统

[操作系统]Android DataPickerDialog组建只显示年月或月日


   最近几天再做一个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    * @return100   */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