前言

  我知道现在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();
}
}

android 开发 时间选择器TimePicker的使用的更多相关文章

  1. Android零基础入门第57节:日期选择器DatePicker和时间选择器TimePicker

    原文:Android零基础入门第57节:日期选择器DatePicker和时间选择器TimePicker 在实际开发中,经常会遇见一些时间选择器.日期选择器.数字选择器等需求,那么从本期开始来学习And ...

  2. android开发时间和日期的代码实现工具类(一)

    android开发时间和日期工具类的代码实现: package com.gzcivil.utils; import android.annotation.SuppressLint; import an ...

  3. Android 开发笔记___时间选择器---timePicker

    像datepicker一样,也有timepicker. 同样有timepickerdialog 所用到的方法还是一样,监听时间选择器的变化. package com.example.alimjan.h ...

  4. Android日期时间选择器实现以及自定义大小

    本文主要讲两个内容:1.如何将DatePicker和TimePicker放在一个dialog里面:2.改变他们的宽度: 问题1:其实现思路就是自定义一个Dialog,然后往里面同时放入DatePick ...

  5. 时间选择器(timepicker)

    可以使用Slider拖动选择,也可以使用timespinner改变时间,或者手工填写. 自动判断位置 效果: 源码: <!DOCTYPE html> <html xmlns=&quo ...

  6. 【Android】时间选择器,选择日期DatePicker 简单详解demo及教程

    作者:程序员小冰,GitHub主页:https://github.com/QQ986945193 新浪微博:http://weibo.com/mcxiaobing 首先给大家看一下我们今天这个最终实现 ...

  7. Android日期时间选择器DatePicker、TimePicker日期时间改变事件响应(Android学习笔记)

    activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&qu ...

  8. android 滚动时间选择器

    一.概述 滚动时间选择现在貌似很常用,所以就总结一下,显示效果一般般 , 做个参考吧! 以上就是效果图,可以滚动选择 日期时间, 由于是在 5.0系统运行的,貌似5.0系统做了什么变动,下面的 &qu ...

  9. 推荐一个android 日期时间选择器(转)

    最近接触了日期选择的功能,那么肯定得需要一个日期选择控件,Android 系统有自带的 DatePicker 控件,但是不说这个控件有多 难看吧,现在 Android 手机版本那么多,用户弹出来的控件 ...

随机推荐

  1. zookeeper 启动显示started,jps查看进程却没有,解决方法

    如图所示, 输入 zkServer.sh start 显示如下: Starting zookeeper ... STARTED 可是输入jps指令 却找不到zookeeper进程 去zkdata文件目 ...

  2. Tensorflow安装环境更新

    本博文是对前面两篇tensorflow的博文的一个继续,对环境的更新. 基于tensorflow的MNIST手写识别 安装tensorflow,那叫一个坑啊 主要出发点: 上述两篇博文的程序运行的环境 ...

  3. 编译NDK的source code一定要用release mode!

    编译NDK的source code一定要用release mode! 编译NDK的source code一定要用release mode! 编译NDK的source code一定要用release m ...

  4. 关于java中Static关键字的加强理解

    static关键字是很多朋友在编写代码和阅读代码时碰到的比较难以理解的一个关键字,也是各大公司的面试官喜欢在面试时问到的知识点之一.下面就先讲述一下static关键字的用法和平常容易误解的地方,最后列 ...

  5. 【IntelliJ 】IntelliJ IDEA 2017激活码

    CNEKJPQZEX-eyJsaWNlbnNlSWQiOiJDTkVLSlBRWkVYIiwibGljZW5zZWVOYW1lIjoibGFuIHl1IiwiYXNzaWduZWVOYW1lIjoiI ...

  6. vue之过滤器

    在vue2.0以前的版本中vue内置的过滤器,但是因为缺乏纯JavaScript的灵活性,现在vue2.0版本中已经删除了内置过滤器,所以需要自己注册过滤器,我们可以定义本地(在某一个template ...

  7. Redis单线程单进程为什么效率那么高

    1.完全基于内存,绝大部分请求是纯粹的内存操作,非常快速.数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1): 2.数据结构简单,对数据操作也简单,Red ...

  8. ping一个网段的cmd程序

    ping一个网段的cmd程序 今天发现只在cmd命令行工具中输入: FOR /L %i IN (1,1,254) DO ping -n 1 192.168.1.%i 即可.

  9. spring 如何决定使用jdk动态代理和cglib(转)

    Spring1.2: 将事务代理工厂[TransactionProxyFactoryBean] 或 自动代理拦截器[BeanNameAutoProxyCreator] 的 proxyTargetCla ...

  10. Vue.js系列之项目结构说明

    转:https://www.jb51.net/article/111658.htm 前言 在上一篇项目搭建文章中,我们已经下载安装了node环境以及vue-cli,并且已经成功构建了一个vue-cli ...