android中都有注册的功能,现在很多注册的都是用手机号,因为用手机号注册,app可以根据注册的手机号推送一些数据给客户端,为了防止有的用户频繁的去获取验证码,可以用时间做一些操作防止此情况的发生,比如用户只能一分钟才能点击,否则不让它点击,在一分钟之内的让按钮不能被点击,一分钟之后才让用户可以点击, 当用户输入手机号,获取验证码的过程中,有一个倒计时的功能,今天就讲讲这个实现,其实在android中就已经为我们提供了此类方便操作 在android.os.CountDownTimer包中,
实例代码:
public class MainActivity extends Activity {
private EditText et_phone;
private Button btn_coder;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et_phone = (EditText) findViewById(R.id.et_phone);
btn_coder = (Button) findViewById(R.id.btn_coder);
et_phone.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if(s.toString().length()==11){//当用户输入的手机不为11位时,就不能点击获取验证码的按钮
btn_coder.setClickable(true);
}else{
btn_coder.setClickable(false);
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
btn_coder.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
startTimer();
}
});
}
protected void startTimer() {
CountDownTimer countDownTimer = new CountDownTimer(60*1000,1000) {
@Override
public void onTick(long millisUntilFinished) {
btn_coder.setText(millisUntilFinished/1000+"");
btn_coder.setClickable(false);//防止重复点击
Log.e("CountDownTimer","millisUntilFinished="+millisUntilFinished/1000);
}
@Override
public void onFinish() {
//可以在这做一些操作,如果没有获取到验证码再去请求服务器
btn_coder.setClickable(true);//防止重复点击
btn_coder.setText("获取验证码");
}
};
countDownTimer.start();
}
}
如图:
还可以通过Handler的方式进行
public class MainActivity extends Activity {
private EditText et_phone;
private Button btn_coder;
private int mCount = 60;
private Handler mHandler = new Handler();
Runnable runnable = new Runnable() {
@Override
public void run() {
mCount--;
if (mCount > 0) {
btn_coder.setText(""+mCount);
mHandler.postDelayed(this, 1000);
} else {
btn_coder.setText("获取验证码");
mHandler.removeCallbacks(this);
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et_phone = (EditText) findViewById(R.id.et_phone);
btn_coder = (Button) findViewById(R.id.btn_coder);
et_phone.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if(s.toString().length()==11){//当用户输入的手机不为11位时,就不能点击获取验证码的按钮
btn_coder.setClickable(true);
}else{
btn_coder.setClickable(false);
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void afterTextChanged(Editable s) {
}
});
btn_coder.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
handlerDown();
}
});
}
protected void handlerDown() {
mCount = 60;
mHandler.postDelayed(runnable, 1000);//延迟一秒执行
//在此调短信的接口,
}
}