前言
我知道现在github上有很多功能强大的各色选择器,但是Android其实是自带一些时间选择器的。在不需要太复杂的ui开发下可以选择使用这些系统自带的。android系统自带时间控件:
- DatePicker 日期显示控件
- DatePickerDialog 日期对话框控件
- TimePicker 时间显示控件
- TimePickerDialog 时间对话框控件
讲解TimePicker选择器的一些自定义设置
首先是布局的创建:
<TimePicker android:id="@+id/timepicker" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:background="#ffffff" />
设置TimePicker选择器风格
TimePicker 本身自带两种风格,都可以在xml中设置,一种是
android:timePickerMode="clock"
另一种是:
android:timePickerMode="spinner"
TimePicker的显示规模大小设置
android:scaleX="2"
android:scaleY="2"
效果:
TimePicker的数据回调
mTimepicker = (TimePicker) inflate.findViewById(R.id.timepicker); mTimepicker.setDescendantFocusability(TimePicker.FOCUS_BLOCK_DESCENDANTS); //设置点击事件不弹键盘 mTimepicker.setIs24HourView(true); //设置时间显示为24小时 mTimepicker.setHour(8); //设置当前小时 mTimepicker.setMinute(10); //设置当前分(0-59) mTimepicker.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() { //获取当前选择的时间 @Override public void onTimeChanged(TimePicker view, int hourOfDay, int minute) { } });
利用反射修改一些选择器的字体效果与背景颜色
需要用到反射的方法了,比如更改分割线的样式,设置起始截止时间等:
首先我们要通过反射获取TimePicker源码里hour和minute的id:
Resources systemResources = Resources.getSystem(); int hourNumberPickerId = systemResources.getIdentifier("hour", "id", "android"); int minuteNumberPickerId = systemResources.getIdentifier("minute", "id", "android");
然后用我们定义的TimePicker来获取这个id并转换成hour和minute对应的NumberPicker:
NumberPicker hourNumberPicker = (NumberPicker) mTimepicker.findViewById(hourNumberPickerId);
NumberPicker minuteNumberPicker = (NumberPicker) mTimepicker.findViewById(minuteNumberPickerId);
通过获取到的hourNumberPicker和minuteNumberPicker我们可以先进行TimePicker的时间限制:
hourNumberPicker.setMinValue(8); //设置最小hour hourNumberPicker.setMaxValue(12); //设置最大hour minuteNumberPicker .setMinValue(0); //设置最小minute minuteNumberPicker .setMaxValue(30); //设置最大minute
修改滚动条背景颜色
hourNumberPicker.setBackgroundColor(getResources().getColor(R.color.colorBlue));// 修改背景颜色
效果图:
隐藏冒号
用最暴力的方式隐藏滚动条的冒号,就是直接找ChildAt
ViewGroup view = (ViewGroup) mTimepicker.getChildAt(0); ViewGroup view2 = (ViewGroup) view.getChildAt(1); view2.getChildAt(1).setVisibility(View.GONE);
禁止键盘输入
mTimePicker.setDescendantFocusability(TimePicker.FOCUS_BLOCK_DESCENDANTS);
TimePicker分割线的颜色和高度
private void setNumberPickerDivider(NumberPicker numberPicker) { NumberPicker picker = numberPicker; Field[] pickerFields = NumberPicker.class.getDeclaredFields(); for (Field pf : pickerFields) { if (pf.getName().equals("mSelectionDivider")) { //设置颜色 pf.setAccessible(true); ColorDrawable colorDrawable = new ColorDrawable( ContextCompat.getColor(this, R.color.colortime)); //选择自己喜欢的颜色 try { pf.set(numberPicker, colorDrawable); } catch (IllegalAccessException e) { e.printStackTrace(); } } if (pf.getName().equals("mSelectionDividerHeight")) { //设置高度 pf.setAccessible(true); try { int result = 3; //要设置的高度 pf.set(picker, result); } catch (Exception e) { e.printStackTrace(); } break; } picker.invalidate(); } }
本文来自博客园,作者:观心静 ,转载请注明原文链接:https://www.cnblogs.com/guanxinjing/p/9708610.html
本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。