天天看點

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