实现重新获取验证码的倒计时的话,我们可以将倒计时的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:
- public void setOnClickListener(OnClickListener l) {
- if (!isClickable()) {
- setClickable(true);
- }
- getListenerInfo().mOnClickListener = l;
- }
可以加深下理解。看自己的需求吧。希望能有一定的提高。