Android数字选择器NumberPicker使用详解
程序员文章站
2022-09-06 13:34:51
数字选择器numberpicker是android3.0之后引入的一个控件,比较常用,比如说手机常用的闹钟,可以选择小时和分钟,如果你需要兼容3.0之前版本,github上...
数字选择器numberpicker是android3.0之后引入的一个控件,比较常用,比如说手机常用的闹钟,可以选择小时和分钟,如果你需要兼容3.0之前版本,github上有开源的项目,具体的下载地址。本人就没有使用开源的项目,就简单的使用了numberpicker显示一下效果,开始正题吧:
基础维护
开发东西先看下效果吧:
numberpicker和textview显示一下时间,线性布局,看下布局文件吧:
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" tools:context="com.example.googlenumberpicker.mainactivity" > <linearlayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_margintop="30dp" android:layout_marginleft="50dp" android:layout_gravity="center_horizontal" > <numberpicker android:id="@+id/hourpicker" android:layout_width="40dp" android:layout_height="wrap_content" /> <textview android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:text="时" /> <numberpicker android:id="@+id/minuteicker" android:layout_width="40dp" android:layout_height="wrap_content" /> <textview android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:text="分" /> </linearlayout> </linearlayout>
demo实现
字选择是可以滑动,所以需要定义一个onvaluechangelistener事件,onscrolllistener滑动事件,formatter事件:
formatter事件:
public string format(int value) { string tmpstr = string.valueof(value); if (value < 10) { tmpstr = "0" + tmpstr; } return tmpstr; }
onvaluechangelistener事件:
public void onvaluechange(numberpicker picker, int oldval, int newval) { toast.maketext( this, "原来的值 " + oldval + "--新值: " + newval, toast.length_short).show(); }
onscrolllistener滑动事件,滑动事件有三个状态:
scroll_state_fling:手离开之后还在滑动
scroll_state_idle:不滑动
scroll_state_touch_scroll:滑动中
public void onscrollstatechange(numberpicker view, int scrollstate) { switch (scrollstate) { case onscrolllistener.scroll_state_fling: toast.maketext(this, "后续滑动(飞呀飞,根本停下来)", toast.length_long) .show(); break; case onscrolllistener.scroll_state_idle: toast.maketext(this, "不滑动", toast.length_long).show(); break; case onscrolllistener.scroll_state_touch_scroll: toast.maketext(this, "滑动中", toast.length_long) .show(); break; } }
初始化:
hourpicker=(numberpicker) findviewbyid(r.id.hourpicker); minutepicker=(numberpicker) findviewbyid(r.id.minuteicker); init();
init方法中,设置数字的最大值,最小值,以及滑动事件:
private void init() { hourpicker.setformatter(this); hourpicker.setonvaluechangedlistener(this); hourpicker.setonscrolllistener(this); hourpicker.setmaxvalue(24); hourpicker.setminvalue(0); hourpicker.setvalue(9); minutepicker.setformatter(this); minutepicker.setonvaluechangedlistener(this); minutepicker.setonscrolllistener(this); minutepicker.setmaxvalue(60); minutepicker.setminvalue(0); minutepicker.setvalue(49); }
还差一步,activity需要继承一下onvaluechangelistener,onscrolllistener,formatter:
public class mainactivity extends activity implements onvaluechangelistener,onscrolllistener,formatter{...}
最后说一点就是numberpicker也是可以显示文字的,重新定义一个numberpicker,加载一下:
valuepicker = (numberpicker) findviewbyid(r.id.valuepicker); string[] city = {"立水桥","霍营","回龙观","龙泽","西二旗","上地"}; valuepicker.setdisplayedvalues(city); valuepicker.setminvalue(0); valuepicker.setmaxvalue(city.length - 1); valuepicker.setvalue(4);
最后显示的效果:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: A - Oil Deposits
推荐阅读