如何修改timepicker的加减按钮

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何修改timepicker的加减按钮相关的知识,希望对你有一定的参考价值。

<!--[if !supportLists]-->1. <!--[endif]-->TimePicker组件其实继承FrameLayout的,可以算的上是一个布局,就像那些TabHost等等的布局一样
<!--[if !supportLists]-->2. <!--[endif]-->在TimePicker的构造函数里面,

public TimePicker(Context context, AttributeSet attrs, intdefStyle)

我们看到了这样的代码

LayoutInflater inflater =(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

inflater.inflate(R.layout.time_picker,this, // we are the parent

true);

一看我们就应该知道了,其实TimePicker也是一种布局,而且他有自己的布局文件R.layout.time_picker

其实在这个构造函数里面我们知道,android的底层其实也是调用java的

// initialize to current time

Calendar cal = Calendar.getInstance();

这个函数来获取时间的

// by default we're not in 24 hour mode

setCurrentHour(cal.get(Calendar.HOUR_OF_DAY));

setCurrentMinute(cal.get(Calendar.MINUTE));

初始化时间

<!--[if !supportLists]-->3. <!--[endif]-->关于在TimePicker的构造函数里加载的R.layout.time_picker我们打开android的平台文件夹

如:

F:\android-sdk-windows\platforms\android-8\data\res\layout在此文件夹下面我们找到了time_picker.xml文件,打开此布局文件我们看到了两个NumberPicker元属和一个Button元属,此控件的效果图就是这样的(注意此处截图没上,如果需要请下载附件的文档)

用过TimePicker控件的朋友应该知道,此控件会自动生成一个按钮,此按钮是显示AM/PM的,其实我们也可以通过函数

TimePicker.setIs24HourView(true);//设置时间格式为24小时制

来设置TimePicker的时间显示方法,默认情况下此属性值为false

<!--[if !supportLists]-->4. <!--[endif]-->分析NumberPicker组件,我们找到android的源码找到NumberPicker.java在此类里面我们看到了此类其实是继承LinearLayout由此可知,其实NumberPicker组件也是一个布局元属

在NumberPicker的构造函数里面我们同样看到了

LayoutInflater inflater=(LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

inflater.inflate(R.layout.number_picker, this, true);

这样的代码,由此我们找到R.layout.number_picker布局文件

<!--[if !supportLists]-->5. <!--[endif]-->分析R.layout.number_picker文件

如:F:\android-sdk-windows\platforms\android-8\data\res\layout在这样的路径下面我们可以找到R.layout.number_picker.xml布局文件打开此布局文件,我们看到这样的代码

有两个NumberPickerButton和一个EditText其实分析我们不难知道其实这个布局文件生成的样式就是这样的

<!--[if !supportLists]-->6. <!--[endif]-->说了这么多下面我来说重点了,其实我们每次点击+或-都会触发这个监听函数

setOnTimeChangedListener所以如果我们需要对时间进行定制的话,我们可以使用此监听器来做一些事情此监听器会插入三个参数很好的是他把TimePicker对象也传入进来了

public void onTimeChanged(TimePickerview, int hourOfDay, int minute)

下面我来说个业务需求

我们要为用户提供一个选择时间的界面,但用户选择时间秒的时候用户只有两个选择要是秒是00,如

要么秒是30,如

我们该如何来做出这样的应用了,下面我就告诉大家我是如何做出这样的应用的

通过上面我们对TimePicker的源码架构分析可以知道其实我们只要通过java强大的反射机制来修改源码里面的一些属性值就可以做到了

<!--[if !supportLists]-->1. <!--[endif]-->在TimePicker类里面我们找到private
final NumberPicker mMinutePicker; 属性因为第3步我们分析了TimePicker的布局构成。是由两个NumberPicker元属和一个Button元属构成的布局文件,我们为什么要反射这个属性了,因为这个属性实现的布局文件里面用到了NumberPicker而NumberPicker是我们设置时间的小时和分钟的组件通过反射mMinutePicker属性我们可以拿到mMinutePicker的实例对象然后通过此对象我们需要反射出NumberPicker里面的mCurrent属性和mCurrentMinute,然后我们重新对这两个属性赋值就可以了下面来看我的代码实现

timePicker.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener()

@Override

public void onTimeChanged(TimePickerview, int hourOfDay,
int minute)

try

Field mMinutePicker =view.getClass().getDeclaredField("mMinutePicker");

mMinutePicker.setAccessible(true);

Object value = mMinutePicker.get(view);

Log.i(TAG,value.getClass()+"");

//反射NumberPicker里面的mCurrent此属性值是显示给用户看的

Field mCurrent = value.getClass().getDeclaredField("mCurrent");

mCurrent.setAccessible(true);

//反射TimePicker类里面的mCurrentMinute属性,此属性是保存用户设置的时间

Field mCurrentMinute = view.getClass().getDeclaredField("mCurrentMinute");

mCurrentMinute.setAccessible(true);

if(minute>0&&minute<30)

mCurrent.set(value, 30);

mCurrentMinute.set(view, 30);



else

mCurrent.set(value, 0);

mCurrentMinute.set(view, 0);



//判断用户是否点击了减按钮

if(minute==59)//如果点击了时间的减按钮那么minute值为00---->59或30---->29

//00---->59

mCurrent.set(value, 30);

mCurrentMinute.set(view, 30);



else if(minute == 29)//30---->29

mCurrent.set(value, 0);

mCurrentMinute.set(view, 0);



catch (Exception e)

e.printStackTrace();





);
参考技术A 简单实现方法非常简单,不需要设置日期或时间的XML布局,直接通过new DatePickerDialog或TimePickerDialog即可实现。代码如下:
//点击日期按钮布局 设置日期
layoutDate.setOnClickListener(new OnClickListener()
@Override
public void onClick(View v)
new DatePickerDialog(MainActivity.this, new DatePickerDialog.OnDateSetListener()
@Override
public void onDateSet(DatePicker view, int year, int month, int day)
// TODO Auto-generated method stub
mYear = year;
mMonth = month;
mDay = day;
//更新EditText控件日期 小于10加0
dateEdit.setText(new StringBuilder().append(mYear).append(-)
.append((mMonth + 1) < 10 ? 0 + (mMonth + 1) : (mMonth + 1))
.append(-)
.append((mDay < 10) ? 0 + mDay : mDay) );

, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH),
calendar.get(Calendar.DAY_OF_MONTH) ).show();

);

其中mYear、mMonth、mDay是定义变量,同时dateEdit是一个EditText控件用于显示具体日期,当数字小于10时前补0,如2015-01-01。下面是设置时间,显示效果和第三部分的效果相同。
//点击时间按钮布局 设置时间
layoutTime.setOnClickListener(new OnClickListener()
@Override
public void onClick(View v)
new TimePickerDialog(MainActivity.this,
new TimePickerDialog.OnTimeSetListener()
@Override
public void onTimeSet(TimePicker view, int hour, int minute)
// TODO Auto-generated method stub
mHour = hour;
mMinute = minute;
//更新EditText控件时间 小于10加0
timeEdit.setText(new StringBuilder()
.append(mHour < 10 ? 0 + mHour : mHour).append(:)
.append(mMinute < 10 ? 0 + mMinute : mMinute).append(:00) );

, calendar.get(Calendar.HOUR_OF_DAY),
calendar.get(Calendar.MINUTE), true).show();

);

jquery问题购物车加减按钮

这组数据是循环出来的,点击第一行的加减按钮,可以,但是点击第二行的加减按钮就没反映 是什么原因,代码如下;
<input id="min" name="" type="button" value="-" />
<input id="text_box" name="goodnum" type="text" value="$item.value.quantity " style="width:25px;" />
<input id="add" name="" type="button" value="+" /></td>
<script>
$(function()
var t = $("#text_box");
$("#add").click(function()
t.val(parseInt(t.val())+1)
setTotal();
)
$("#min").click(function()
t.val(parseInt(t.val())-1)
setTotal();
)
function setTotal()
var tt = $("#text_box").val();
var pbinfoid=$("#pbinfoid").val();
if(tt<=0)
alert('输入的值错误!');
t.val(parseInt(t.val())+1)
else
window.location.href = "shopping!updateMyCart.action?pbinfoid="+pbinfoid+"&number="+tt;



)
</script>
欢迎指错,谢谢。

参考技术A 因为一个页面中只能存在一个 id 为 add 的元素,根据你现在的代码,如果有10行记录,那就会有10个 id 为 add 的 input。

所以你要把这些 input 的 id 都改为 class,text_box 的值也要根据每次点击来判断

<input class="min" name="" type="button" value="-" />
<input class="text_box" name="goodnum" type="text" value="$item.value.quantity " style="width:25px;" />
<input class="add" name="" type="button" value="+" />

$(".add").click(function()
// $(this).prev() 就是当前元素的前一个元素,即 text_box
$(this).prev().val(parseInt($(this).prev().val()) + 1);
setTotal();
);

$(".min").click(function()
// $(this).next() 就是当前元素的下一个元素,即 text_box
$(this).next().val(parseInt($(this).next().val()) - 1);
setTotal();
);本回答被提问者和网友采纳

以上是关于如何修改timepicker的加减按钮的主要内容,如果未能解决你的问题,请参考以下文章

mysql json字段中数值的加减

Python中的日期的加减如何实现?

mysql 中日期的加减

JS中如何实现小数的加减

如何用js进行日期的加减

更改日期时强制关闭:时间选择器 (NPE)