Android发送验证码倒计时

来源:互联网 发布:java分布式调度框架 编辑:程序博客网 时间:2024/06/11 02:45

实现重新获取验证码的倒计时的话,我们可以将倒计时的button进行一个封装的设计。方便以后多个button都使用倒计时的使用。需要实现CountDownTimer。

TimeCountUtil.java的代码如下所示:

import android.app.Activity;import android.graphics.Color;import android.os.CountDownTimer;import android.text.Spannable;import android.text.SpannableString;import android.widget.Button;/** * Created by Administrator on 2016/7/11 0011. */public class TimeCountUtil extends CountDownTimer {    private Activity activity;    private Button btn;//按钮    /**     * @param millisInFuture    The number of millis in the future from the call     *                          to {@link #start()} until the countdown is done and {@link #onFinish()}     *                          is called.     * @param countDownInterval The interval along the way to receive     *                          {@link #onTick(long)} callbacks.     */    //一个是总的时间millisInFuture,一个是countDownInterval    public TimeCountUtil(Activity activity, long millisInFuture, long countDownInterval, Button btn) {        super(millisInFuture, countDownInterval);        this.activity = activity;        this.btn = btn;    }    @Override    public void onTick(long millisUntilFinished) {//        btn.setClickable(false); //设置不能点击        btn.setEnabled(false);        btn.setText(millisUntilFinished / 1000 + "秒后可重新发送");  //设置倒计时的时间        btn.setBackground(activity.getResources().getDrawable(R.mipmap.board_non_pre)); //不能点击的时候的按钮的背景色        Spannable span = new SpannableString(btn.getText().toString()); //获取按钮的文字        btn.setText(span);    }    @Override    public void onFinish() {        btn.setText("重新获取验证码");//        btn.setClickable(true);//重新获得点击        btn.setEnabled(true);        btn.setBackground(activity.getResources().getDrawable(R.mipmap.login_btn));//还原背景色        btn.setText("重新获取验证码");        btn.setTextColor(Color.WHITE);    }}

然后在我们需要的一个button上面,将这个button的id传参到TimeCountUtil的构造方法中就ok啦。

具体实现如下:

获取资源,不需多说。

commit_btn = (Button) findViewById(R.id.commit_btn);
然后用TimeCountUtil的构造方法,代码:

TimeCountUtil timeCountUtil = new TimeCountUtil(this, 10000, 1000, commit_btn);timeCountUtil.start();
具体就这些了,然后TimeCountUtil中的方法,可以根据自己的需要来进行一定的设置,包括时间的设置也是可以根据自己的需求来进行设定的。

还有就是setEnable()和setClickable()的区别简单的说一下吧,我做的过程中刚开始用的setClickable,但是没能实现,查了一下才知道:

setEnable设置的是用户是否可以点击按钮,false的话是将控件完全禁用了。而setClickable是设置程序在某个条件下自动点击此按钮。

还有一个比较有说服力的部分代码来解释setClickable:

  1. public void setOnClickListener(OnClickListener l) {  
  2.     if (!isClickable()) {  
  3.         setClickable(true);  
  4.     }  
  5.     getListenerInfo().mOnClickListener = l;  
  6. }  

可以加深下理解。看自己的需求吧。希望能有一定的提高。


1 0