最近公司做一个手机商城APP,注册用户时需要用,用户手机号注册账号,现在基本大部分APP注册都是这样了。遇到了就记下来,方便以后再用,毕竟写过的代码久了不写还是会忘记的。
看了一下官方文档,这个类及其简单,只有四个方法,上面都涉及到了onTick,onFinsh、cancel和start。其中前面两个是抽象方法,所以要重写一下。
下面是一个小例子:
public class MainActivity extends Activity implements OnClickListener {
private EditText ed_phone;// 手机号
private Button ed_button;// 验证码按钮
private String phone;
private Timecount timecount;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ed_phone = (EditText) findViewById(R.id.ed_phone);
ed_button = (Button) findViewById(R.id.ed_button);
ed_button.setOnClickListener(this);
timecount = new Timecount(60000, 1000);// 构造CountDownTimer对象
}
/**
* 定义倒计时内部类
*/
class Timecount extends CountDownTimer {
public Timecount(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);// 参数依次为总时长,和计时的时间间隔
}
@Override
public void onTick(long millisUntilFinished) {
ed_button.setClickable(false);
ed_button.setText(millisUntilFinished / 1000 + "s");
}
@Override
public void onFinish() {
ed_button.setText("重新发送");
ed_button.setClickable(true);
}
}
// 验证手机号是否为空
private void info() {
phone = ed_phone.getText().toString();
if (TextUtils.isEmpty(phone)) {
Toast.makeText(MainActivity.this, "请输入手机号码", Toast.LENGTH_SHORT)
.show();
return;
}
if (!IS_PHONE.matcher(phone).matches()) {
Toast.makeText(MainActivity.this, "请输入正确的手机号", Toast.LENGTH_SHORT)
.show();
return;
}
timecount.start();// 开始倒计时
}
//个人习惯这么写
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.ed_button:
info();
break;
default:
break;
}
}
最终效果图;