本文为大家分享了Android实现通用验证码输入框的具体代码,供大家参考,具体内容如下
效果图
话不多说先上效果图,可以先先看看是不是自己想要的
闲聊
闲来无事优化项目时,发现原来的验证码输入框,可扩展性不高,就拿来优化了一下,说说我开始的的思路吧,最开始是想用自定义View实现的,但是发现各种画矩,太烦人了,最后采用的组合控件的形式,Android有现成的控件,用来组合组合就能用,为什么不用呢。
源码
xml ITEM 布局文件(view_auth_code_input_item.xml)
<&#63;xml version="1.0" encoding="utf-8"&#63;>
attrs 自定义属性(attrs.xml)
<&#63;xml version="1.0" encoding="utf-8"&#63;>
组合控件(AuthCodeInputView.java)
import android.content.Context; import android.content.res.TypedArray; import android.graphics.Color; import android.os.Build; import android.text.TextUtils; import android.util.AttributeSet; import android.util.TypedValue; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; import android.widget.TextView; import androidx.annotation.ColorInt; import androidx.annotation.RequiresApi; /** ** author :BraveTou * blog :https://blog.csdn.net/bravetou * time :2020/9/4 16:43 * desc :*/ public class AuthCodeInputView extends LinearLayout { // private int mDefaultSpacing = 16; // @ColorInt private int mDefaultColor = Color.BLACK; // private int mDefaultTextSize = 36; // @ColorInt private int mCurrentSplitLineColor = mDefaultColor; // @ColorInt private int mOtherSplitLineColor = mDefaultColor; // private int mSplitLineHeight = 1; // private int mDigit = 4; // private int mSingleCaptchaWidth = 100; // @ColorInt private int mCurrentTextColor = mDefaultColor; // private int mCurrentTextSize = mDefaultTextSize; // @ColorInt private int mOtherTextColor = mDefaultColor; // private int mOtherTextSize = mDefaultTextSize; // 记录当前输入文本 private String mText = ""; public AuthCodeInputView(Context context) { super(context); init(context, null); } public AuthCodeInputView(Context context, AttributeSet attrs) { super(context, attrs); init(context, attrs); } public AuthCodeInputView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(context, attrs); } @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) public AuthCodeInputView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); init(context, attrs); } // 初始化 private void init(Context context, AttributeSet attrs) { setOrientation(LinearLayout.HORIZONTAL); setGravity(Gravity.CENTER); if (getChildCount() > 0) { removeAllViews(); } initAttrs(context, attrs); if (mDigit <= 0) { return; } for (int i = 0; i* 自定义验证码输入框 **0) { setText(mText.substring(0, count - 1)); } else { setText(""); } } // 设置文本 public void setText(String text) { text = text.trim(); int length = TextUtils.isEmpty(text) &#63; 0 : text.length(); if (length > mDigit) { this.mText = text.substring(0, mDigit); length = mDigit; } else { this.mText = length > 0 &#63; text : ""; } int count = getChildCount(); for (int i = 0; i
至于效果图下面那个安全键盘源码就太多了,我就不多了的,我这边是组合控件实现的,超简单。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。