通过Handler 及 handleMessage实现,代码如下,可以直接使用。
count :指定多长时间后将mBtn_resend_code的enable状态设置为true。
originText:保存的是之前Button的text。
/**
* 控件倒计时改变状态
* @param v
* @param time
* @param origin
*/
private void timeButton(final View v, final int time, final String origin) {
// TODO Auto-generated method stub
((Button) v).setEnabled(false);
final Handler handler = new Handler() {
public void handleMessage(Message msg) {
((Button) v).setText(msg.arg1 + "秒后可重发");
if (msg.arg1 == 0) {
((Button) v).setText(origin);
((Button) v).setEnabled(true);
}
}
};
new Thread() {
int count = time;
public void run() {
while (count > 0) {
Message msg = new Message();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
count--;
msg.arg1 = count;
handler.sendMessage(msg);
}
}
}.start();
}
第二种方法:通过Handler及SendMessage来解决
//定义消息
private static final int TIME_CHANGE = 0x110;
int type;
int mTime = Constant.TIME_LIMIT;
Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
type = msg.what;
switch (type) {
case TIME_CHANGE:
mSendPhone.setText(mTime + "秒后可重发");
mTime--;
// 倒计时时间为0,不发送消息,初始化Button状态
if (mTime == 0) {
mHandler.removeMessages(TIME_CHANGE);
//初始化到初始的时间值
mTime = Constant.TIME_LIMIT;
mSendPhone.setEnabled(true);
mSendPhone.setText(originText);
} else {
mHandler.sendEmptyMessageDelayed(TIME_CHANGE, 1000);
}
break;
}
};
};