Android DatePicker,NumPicker解析(執行個體)
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiYWan5CZyEjNzUWYyITMwkzNyQDOmFTZmlTN5YWMlljNxMTM48CX0IzLcJTMwIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjL1M3Lc9CX6MHc0RHaiojIsJye.gif)
DatePicker
Android提供了一個選擇日期的控件——DatePicker,基本的用法就不說了,在用的過程中會出現幾個問題,分割線的顔色無法改變,字型大小,以及DatePicker的整體大小調整,下面就來解決這些問題.。
1.更改DatePicker分割線的顔色
/** * 設定時間選擇器的分割線顔色 * * @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);
/** * 調整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接口)。
/* 更改分割線顔色 */ 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