天天看点

Android DatePicker,NumPicker解析(实例)

Android DatePicker,NumPicker解析(实例)

Android DatePicker,NumPicker解析(实例)
Android DatePicker,NumPicker解析(实例)

DatePicker

Android提供了一个选择日期的控件——DatePicker,基本的用法就不说了,在用的过程中会出现几个问题,分割线的颜色无法改变,字体大小,以及DatePicker的整体大小调整,下面就来解决这些问题.。

1.更改DatePicker分割线的颜色

Android DatePicker,NumPicker解析(实例)

  /**      * 设置时间选择器的分割线颜色      *      * @param datePicker      */     private void setDatePickerDividerColor(DatePicker datePicker) {         // Divider changing:         // 获取 mSpinners         LinearLayout llFirst = (LinearLayout) datePicker.getChildAt(0);         // 获取 NumberPicker         LinearLayout mSpinners = (LinearLayout) llFirst.getChildAt(0);         for (int i = 0; i < mSpinners.getChildCount(); i++) {             NumberPicker picker = (NumberPicker) mSpinners.getChildAt(i);             Field[] pickerFields = NumberPicker.class.getDeclaredFields()             for (Field pf : pickerFields) {                 if (pf.getName().equals("mSelectionDivider")) {                     pf.setAccessible(true);                     try {                         pf.set(picker, new ColorDrawable(Color.parseColor("#bd1b21")));//设置分割线颜色                     } catch (IllegalArgumentException e) {                         e.printStackTrace();                     } catch (Resources.NotFoundException e) {                         e.printStackTrace();                     } catch (IllegalAccessException e) {                         e.printStackTrace();                     }                     break;                 }             }         }     }

2.更改字体大小-直接在style中写textsize属性

  <style name="AppTheme" parent="AppBaseTheme">         <!-- All customizations that are NOT specific to a particular API-level can go here. -->         <item name="android:textSize">10sp</item>     </style>      

3.DatePicker的整体大小调整-resizePikcer(datePicker);

Android DatePicker,NumPicker解析(实例)
   /**      * 调整FrameLayout大小      *      * @param tp      */     private void resizePikcer(FrameLayout tp) {         List<NumberPicker> npList = findNumberPicker(tp);         for (NumberPicker np : npList) {             resizeNumberPicker(np);         }     }      
  /**      * 得到viewGroup里面的numberpicker组件      *      * @param viewGroup      * @return      */     private List<NumberPicker> findNumberPicker(ViewGroup viewGroup) {         List<NumberPicker> npList = new ArrayList<NumberPicker>();         View child = null;         if (null != viewGroup) {             for (int i = 0; i < viewGroup.getChildCount(); i++) {                 child = viewGroup.getChildAt(i);                 if (child instanceof NumberPicker) {                     npList.add((NumberPicker) child);                 } else if (child instanceof LinearLayout) {                     List<NumberPicker> result = findNumberPicker((ViewGroup) child);                     if (result.size() > 0) {                         return result;                     }                 }             }         }         return npList;     }      
  /*    * 调整大小    */     private void resizeNumberPicker(NumberPicker np) {         LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(280, LinearLayout.LayoutParams.WRAP_CONTENT);         params.setMargins(10, 0, 10, 0);         np.setLayoutParams(params);     }      

NumPicker

NumPicker是一个数字选择器,下面通过两个NumPicker来实现时间选择器,并且修改分割线的颜色(主要实现了NumberPicker.Formatter和OnValueChangeListener接口)。

Android DatePicker,NumPicker解析(实例)
/* 更改分割线颜色  */     private void setNumberPickerDividerColor(NumberPicker numberPicker) {         NumberPicker picker = numberPicker;         Field[] pickerFields = NumberPicker.class.getDeclaredFields();         for (Field pf : pickerFields) {             if (pf.getName().equals("mSelectionDivider")) {                 pf.setAccessible(true);                 try {                     //设置分割线的颜色值 透明                     pf.set(picker, new ColorDrawable(this.getResources().getColor(android.R.color.holo_red_dark)));                 } catch (IllegalArgumentException e) {                     e.printStackTrace();                 } catch (Resources.NotFoundException e) {                     e.printStackTrace();                 } catch (IllegalAccessException e) {                     e.printStackTrace();                 }                 break;             }         }     }      
    @Override     public String format(int value) {         String tmpStr = String.valueOf(value);         if (value < 10) {             tmpStr = "0" + tmpStr;         }         return tmpStr;     }   private NumberPicker.OnValueChangeListener mOnHourChangedListener = new NumberPicker.OnValueChangeListener() {         @Override         public void onValueChange(NumberPicker picker, int oldVal, int newVal) {             Log.e("时:", newVal + "");         }     };     private NumberPicker.OnValueChangeListener mOnMinuteChangedListener = new NumberPicker.OnValueChangeListener() {         @Override         public void onValueChange(NumberPicker picker, int oldVal, int newVal) {             Log.e("分:", newVal + "");         }     };      
  /*     时间(hourpicker、minuteicker是NumberPicker)     */         hourpicker.setFormatter(this);         hourpicker.setOnValueChangedListener(mOnHourChangedListener);         hourpicker.setMaxValue(24);         hourpicker.setMinValue(0);         hourpicker.setValue(0);         minuteicker.setOnValueChangedListener(mOnMinuteChangedListener);         minuteicker.setFormatter(this);         minuteicker.setMaxValue(60);         minuteicker.setMinValue(0);         minuteicker.setValue(0);      

源码下载地址:

http://download.csdn.net/download/qq_34908107/9906332