前言

数字选择器NumberPicker是Android3.0之后出的一个控件,所以如果要兼容3.0之前的版本就需要用到GitHub上的开源项目,下载地址是https://github.com/SimonVT/android-numberpicker

基本用法

显示数字

设置最大值

mNumberPicker.setMaxValue(10); //设置最大值

设置最小值

 mNumberPicker.setMinValue(0); //设置最小值

设置当前值

mNumberPicker.setValue(5); //设置当前值

获取当前值

int value = mNumberPicker.getValue(); //获取当前值

有一点需要注意的数值不能用负数

显示文字

我们只需要使用一个方法就可以了

public void setDisplayedValues(String[] displayedValues) 

所以代码可以这么写,注意最大值是数组的最大下标

String[] datas = new String[]{"北京","上海","广州","深圳"};
mNumberPicker.setDisplayedValues(datas); //设置文字
mNumberPicker.setMaxValue(datas.length - 1); //设置最大值,最大值是datas[3]

设置监听

NumberPicker有三个监听分别是OnValueChangeListener、OnScrollListener、Formatter

OnValueChangeListener值改变监听

代码如下

mNumberPicker.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {/*** 每当选择的值改变时都会调用一次* @param oldVal 改变前的值* @param newVal 改变后的值*/@Overridepublic void onValueChange(NumberPicker picker, int oldVal, int newVal) {//做想做的事}});

每当选择的值改变都会调用一次这个方法,选择的值改变也就是显示在中间的那个值改变

OnScrollListener滑动事件

实例代码如下

mNumberPicker.setOnScrollListener(new NumberPicker.OnScrollListener() {@Overridepublic void onScrollStateChange(NumberPicker view, int scrollState) {switch (scrollState){case SCROLL_STATE_FLING://手离开之后还在滑动break;case SCROLL_STATE_IDLE://停止滑动break;case SCROLL_STATE_TOUCH_SCROLL://正在滑动break;}}});

滑动事件就是监听控件滑动时的状态
滑动事件有三个状态

  1. SCROLL_STATE_FLING ——>手离开之后还在滑动
  2. SCROLL_STATE_IDLE ——>停止滑动
  3. SCROLL_STATE_TOUCH_SCROLL ——>正在滑动

Formatter监听设置格式化程序用于格式化当前值

实例代码如下

mNumberPicker.setFormatter(new NumberPicker.Formatter() {@Overridepublic String format(int value) {//做一些格式转换return "返回转换后要显示的内容";}});

这个监听是用于做一些格式转换的,比如把10以下的数前面加个0显示(01、02、03…..),也能理解为转换器,下面我会为大家介绍如何利用Formatter监听设置10以下的数前面加0显示。
我们需要注意一下不能返回空

常见问题

设置小于10的数前面显示0


实现这个效果我们只需要设置Formatter监听,让小于10的数前面加个0再输出

mNumberPicker.setMaxValue(20);mNumberPicker.setMinValue(0);mNumberPicker.setValue(0);mNumberPicker.setFormatter(new NumberPicker.Formatter() {@Overridepublic String format(int value) {String data;if (value < 10) {data = "0" + value;//让小于10的数前面加个0再输出} else {data = String.valueOf(value); //大于10的数就不变}return data;}});

循环滚动

要设置是否循环滚动只需要使用一个方法就可以了

mNumberPicker.setWrapSelectorWheel(true); //设置循环滚动

设置false代表不循环滚动,true代表循环滚动
该方法需要注意的是

  • 一定要设置好最大值才有效果
  • 最大值必须大于等于3

禁止编辑

当我们用手指点一下显示的数值会发现竟然可以输入,有些时候我们需要禁止输入,该怎么办呢?我介绍两种常用的方法一种是用在代码里设置,一种是在xml里面设置。

java代码中设置

只需要使用一个方法就可以了

mNumberPicker.setDescendantFocusability(NumberPicker.FOCUS_BLOCK_DESCENDANTS); //禁止输入

xml中设置

设置NumberPicker的属性

android:focusable="true"
android:focusableInTouchMode="true"

这样就可以禁止输入了

改变字体颜色、字体大小

很遗憾NumberPicker没有提供修改字体颜色和字体大小的方法,不过我们可以继承NumberPicker实现需求,代码并不复杂,只是多写了几行代码,其他代码复制粘贴就好了。

package com.my.numberpickertest;import android.content.Context;
import android.graphics.Color;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.NumberPicker;public class MyNumberPicker extends NumberPicker {public MyNumberPicker(Context context) {super(context);}public MyNumberPicker(Context context, AttributeSet attrs) {super(context, attrs);}public MyNumberPicker(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);}@Overridepublic void addView(View child) {super.addView(child);updateView(child);}@Overridepublic void addView(View child, int index, ViewGroup.LayoutParams params) {super.addView(child, index, params);updateView(child);}@Overridepublic void addView(View child, ViewGroup.LayoutParams params) {super.addView(child, params);updateView(child);}/*** 修改字的大小和颜色*/private void updateView(View view){if( view instanceof EditText){EditText editText = (EditText) view;editText.setTextColor(Color.parseColor("#00ff00")); //修改字的颜色editText.setTextSize(30);//修改字的大小}}}

然后在xml中使用

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><com.my.numberpickertest.MyNumberPicker
        android:id="@+id/numberPicker"android:layout_width="wrap_content"android:layout_height="wrap_content"/>
</RelativeLayout>

改变分割线颜色和隐藏分割线

我们需要通过反射设置分割线的颜色,代码还是在继承的类中修改

package com.my.numberpickertest;import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.NumberPicker;import java.lang.reflect.Field;public class MyNumberPicker extends NumberPicker {public MyNumberPicker(Context context) {super(context);}public MyNumberPicker(Context context, AttributeSet attrs) {super(context, attrs);}public MyNumberPicker(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);}@Overridepublic void addView(View child) {super.addView(child);updateView(child);}@Overridepublic void addView(View child, int index, ViewGroup.LayoutParams params) {super.addView(child, index, params);updateView(child);}@Overridepublic void addView(View child, ViewGroup.LayoutParams params) {super.addView(child, params);updateView(child);}/*** 修改字的大小和颜色*/private void updateView(View view){if( view instanceof EditText){EditText editText = (EditText) view;editText.setTextColor(Color.parseColor("#00ff00")); //修改字的颜色editText.setTextSize(30);//修改字的大小}}/*** 修改分割线的颜色*/public void setNumberPickerDividerColor(int color){Field[] pickerFields = NumberPicker.class.getDeclaredFields();for (Field pf : pickerFields){if(pf.getName().equals("mSelectionDivider")){ //找到mSelectionDividerpf.setAccessible(true);//设置分割线的颜色try {pf.set(this, new ColorDrawable(color));} catch (IllegalAccessException e) {e.printStackTrace();}}}}}

使用

mMyNumberPicker = (MyNumberPicker) findViewById(R.id.numberPicker);mMyNumberPicker.setMinValue(0); //设置最小值mMyNumberPicker.setMaxValue(10); //设置最大值mMyNumberPicker.setValue(0); //设置当前值//设置分割线的颜色 设置0可以让颜色变透明mMyNumberPicker.setNumberPickerDividerColor(0xffff0000);

隐藏分割线就是设置分割线的颜色为透明

mMyNumberPicker.setNumberPickerDividerColor(0);

设置文字颜色、文字大小、分割线颜色的实例代码

有兴趣的朋友可以读一读另一篇文章NumberPicker实践

安卓NumberPicker数字选择器用法相关推荐

  1. android用出生日期显示星座代码,安卓 NumberPicker使用说明以及实例:星座判断

    NumberPicker的用法 说明:NumberPicker:数字选择器,是3.0以后引入的组件,可以通过其做些数字的滑动选择,也可以用其做一些定时器的应用,该篇是平时学习中的一些心得和小结,以及写 ...

  2. html兄弟选择器怎么用,CSS的相邻兄弟选择器用法示例讲解

    对于有相同父元素的相邻HTML元素查找便可以使用CSS的相邻兄弟选择器,这里我们就来看一下CSS的相邻兄弟选择器用法简单讲解: 可选择紧接在另一个元素后的元素,且二者有相同的父级元素 下面代码中,it ...

  3. python爬虫哪个选择器好用_Python网络爬虫四大选择器用法原理总结

    前几天小编连续写了四篇关于Python选择器的文章,分别用正则表达式.BeautifulSoup.Xpath.CSS选择器分别抓取京东网的商品信息.今天小编来给大家总结一下这四个选择器,让大家更加深刻 ...

  4. 安卓案例:Volley用法演示

    安卓案例:Volley用法演示 一.Volley简介 我们平时在开发Android应用的时候不可避免地都需要用到网络技术,而多数情况下应用程序都会使用HTTP协议来发送和接收网络数据.Android系 ...

  5. js后代选择器_jQuery后代选择器用法实例

    本文实例讲述了jQuery后代选择器用法.分享给大家供大家参考.具体分析如下: 后代选择器匹配给定的祖先元素下用以匹配的所有后代元素. 点击选择器可以查阅参考手册中所有jQuery选择器. 代码实例如 ...

  6. html5类选择器用什么表示,HTML_揭秘常用的五类CSS选择器用法,有许多新手朋友不知道在什么 - phpStudy...

    揭秘常用的五类CSS选择器用法 有许多新手朋友不知道在什么情况下运用什么样的CSS选择器,针对新手朋友,对CSS选择器作一些简单的说明,这里重点介绍一下最常用的五类CSS选择器的使用. 本文向大家描述 ...

  7. oracle正则判断纯数字,oracle 判断字段是否为是数字 regexp_like用法 正则表达式

    oracle 判断字段是否为是数字regexp_like用法正则表达式ORACLT TNND 2010-07-15 10:12:28 阅读303 评论0 字号:大中小订阅 /* ORACLE中的支持正 ...

  8. HTML5中的数字类型的输入框:数字选择器

    HTML5中的数字类型的输入框:数字选择器 html5 Input类型有如下几种: color.date.datetime.datetime-local.email month.number.rang ...

  9. android setlatesteventinfo 找不到,安卓通知的基本用法

    写android通知的时候发现Notification的setLatestEventInfo被弃用,于是搜素并整理了一下新的android通知的基本用法. 一.获取NotificationManage ...

最新文章

  1. HTTP和SOAP完全就是两个不同的协议
  2. Yum在线升级之网络(本地)服务器的搭建!
  3. mvc core2.1 Identity.EntityFramework Core 注册 (二)
  4. java学习(六)数据类型分类
  5. 通过源码的方式编译hadoop的安装文件
  6. c#去掉html样式,C# 清除HTML格式
  7. 面向对象编程的两顶帽子
  8. Flutter AnimatedOpacity 实现透明度渐变动画效果
  9. 【Unity开源项目精选】AssetStudio:提取Unity游戏的资源
  10. 服务器虚拟化的意思,服务器虚拟化存储的好处以及作用
  11. Linux 内核修复5个高危漏洞
  12. 使用 RIP、OSPF 发布默认路由
  13. 简单 黑苹果dsdt教程_DSDT完美睡眠教程
  14. 新版仿山楂岛留言PHP源码+短视频/公众号吸粉引流
  15. 车载网络测试 - UDS诊断篇 - 诊断服务$10
  16. 简单的纯JS小游戏--消灭星星
  17. unityAndroid9.0不能下载AB包的问题
  18. 中微子电池(Neutrinovoltaic)是能源发展的新载体
  19. 离梦想最近的时候是什么时候?
  20. iOS开发--一些开源的学习资源

热门文章

  1. ubuntu打开终端方法
  2. 4:Vim编辑器与Shell命令脚本
  3. android重启app store,‎App Store 上的“王牌战争:文明重启”
  4. emf java_利用JAVA读取EMF相关文件并作相关格式的转化-实用知识
  5. OCS2工具包安装问题记录
  6. 潮流计算中,已知末端功率和首端电压,手算方法
  7. Virbox LM 软件加密保护
  8. 程序员有多难撩?网友:已读不回的都是渣男?
  9. 爆款短视频剪辑方法技巧,这样剪辑出来的短视频更容易爆,收藏
  10. 3.3 固定次数的循环之一