Android 短信验证码控件,便于项目中使用统一样式,统一提示改动。个人觉得挺好用的
<span style="font-size:18px;">public class SMSButton extends Button { /** 是否展示 */ private boolean mAttached; /** 发送验证码后等待的时间 */ private int delayTime = 60; /** Button 上面的文本 */ private String showText = "获取"; /** Button 等待的时候显示的文本 */ private String delayText = FORMATETAG + "秒"; /** 如今是否在倒计时 */ private boolean isDelayed = false; private SMSOnClickListener clickListener; private int currentDelayTime = 0; private static final String FORMATETAG = "%d"; private Runnable mTimer = new Runnable() { @Override public void run() { currentDelayTime -= 1; if (currentDelayTime <= 0) { isDelayed = false; setClickable(true); setText(showText); } else { getHandler().postDelayed(mTimer, 1000); setDelayTimeText(currentDelayTime); } } }; private void setDelayTimeText(int time) { setText(String.format(delayText, time)); } public SMSButton(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); initView(); } public SMSButton(Context context, AttributeSet attrs) { super(context, attrs); initView(); } public SMSButton(Context context) { super(context); initView(); } @Override public void setOnClickListener(OnClickListener l) { super.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (!isDelayed) {// 假设没有在等待 if (clickListener != null) { if (clickListener.validate()) { setClickable(false); isDelayed = true; currentDelayTime = delayTime; getHandler().post(mTimer); clickListener.onClick(); } } } } }); } /** * 初始化页面 */ private void initView() { String text = getText().toString().toString().trim(); if (text != null && !"".equals(text)) { showText = text; } } @Override protected void onAttachedToWindow() { super.onAttachedToWindow(); if (!mAttached) { mAttached = true; setText(showText); } } @Override protected void onDetachedFromWindow() { super.onDetachedFromWindow(); if (mAttached) { mAttached = false; isDelayed = false; getHandler().removeCallbacks(mTimer); } } public int getDelayTime() { return delayTime; } public void setDelayTime(int delayTime) { this.delayTime = delayTime; } public String getShowText() { return showText; } public void setShowText(String showText) { this.showText = showText; } public String getDelayText() { return delayText; } public void setDelayText(String start, String end) { this.delayText = start + FORMATETAG + end; } public SMSOnClickListener getSMSOnClickListener() { return clickListener; } public void setSMSOnClickListener(SMSOnClickListener clickListener) { setOnClickListener(null); this.clickListener = clickListener; } public interface SMSOnClickListener { public boolean validate(); public void onClick(); }</span>使用方法:
/** * 样例 * * smsButton = (SMSButton) findViewById(R.id.smsButton); * smsButton.setShowText("获取"); * smsButton.setDelayText("等", "秒"); smsButton.setSMSOnClickListener(new * SMSOnClickListener() { * * @Override public boolean validate() { return true; } * @Override public void onClick() { * ToastUtil.getInstance().toastInCenter(LoadingActivity.this, * "onClick"); } }); */