• Android 短信验证码控件


    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"); } });
    	 */



  • 相关阅读:
    洛谷P5281 [ZJOI2019] Minimax搜索
    势函数
    Comet OJ [Contest #5] 迫真大游戏
    洛谷P3307 [SDOI2013] 项链
    洛谷P5985 [PA2019] Muzyka pop
    CF1205E Expected Value Again
    review
    CF891E Lust
    线性代数
    洛谷P4607 [SDOI2018] 反回文串
  • 原文地址:https://www.cnblogs.com/slgkaifa/p/6851863.html
Copyright © 2020-2023  润新知