本文实例为大家分享了Android实现通用验证码输入框第2篇具体实现代码,供大家参考,具体内容如下
效果图
话不多说,我们还是先上效果图,可以先先看看是不是自己想要的
闲聊
这种验证码输入框使用组合控件就比较烦人了,所以这边直接使用自定View步奏实现
源码
自定义输入框属性(attrs.xml)
<&#63;xml version="1.0" encoding="utf-8"&#63;>
资源文件(code_input_view_border_bg.xml)
<&#63;xml version="1.0" encoding="utf-8"&#63;>
自定义控件(CodeInputView.java)
import android.annotation.SuppressLint; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.os.Build; import android.text.InputFilter; import android.text.TextPaint; import android.util.AttributeSet; import android.widget.EditText; import androidx.annotation.RequiresApi; import androidx.core.content.ContextCompat; /** ** author :BraveTou * blog :https://blog.csdn.net/bravetou * time :2020/9/8 11:49 * desc :*/ @SuppressLint("AppCompatCustomView") public class CodeInputView extends EditText { // private int mMaxLength = 4; // private int mBorderWidth = 100; // private int mBorderHeight = 100; // private int mBorderSpacing = 24; // private Drawable mBorderImage; // 用矩形来保存方框的位置、大小信息 private final Rect mRect = new Rect(); // 文本颜色 private int mTextColor; public CodeInputView(Context context) { super(context); init(context, null); } public CodeInputView(Context context, AttributeSet attrs) { super(context, attrs); init(context, attrs); } public CodeInputView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(context, attrs); } @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) public CodeInputView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); init(context, attrs); } // 初始化 private void init(Context context, AttributeSet attrs) { if (null == mBorderImage) { mBorderImage = ContextCompat.getDrawable(context, R.drawable.code_input_view_border_bg); } initAttrs(context, attrs); // 设置最大输入长度 setMaxLength(mMaxLength); // 禁止长按 setLongClickable(false); // 去掉背景颜色 setBackgroundColor(Color.TRANSPARENT); // 不显示光标 setCursorVisible(false); } // 设置最大长度 private void setMaxLength(int maxLength) { if (maxLength >= 0) { setFilters(new InputFilter[]{new InputFilter.LengthFilter(maxLength)}); } else { setFilters(new InputFilter[0]); } } // 初始化属性 private void initAttrs(Context context, AttributeSet attrs) { if (null != attrs) { // AttributeSet 属性值的索引 TypedArray o = context.obtainStyledAttributes(attrs, R.styleable.CodeInputView); // mMaxLength = o.getInteger(R.styleable.CodeInputView_android_maxLength, 4); // mBorderWidth = (int) o.getDimension(R.styleable.CodeInputView_borderWidth, 100f); // mBorderHeight = (int) o.getDimension(R.styleable.CodeInputView_borderHeight, 100f); // mBorderSpacing = (int) o.getDimension(R.styleable.CodeInputView_borderSpacing, 24); // Drawable drawable = o.getDrawable(R.styleable.CodeInputView_borderImage); if (null != drawable) { mBorderImage = drawable; } // 回收资源 o.recycle(); } } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); // 当前输入框的宽高信息 int width = getMeasuredWidth(); int height = getMeasuredHeight(); int widthMode = MeasureSpec.getMode(widthMeasureSpec); int heightMode = MeasureSpec.getMode(heightMeasureSpec); // 判断高度是否小于自定义边框高度 height = height* 自定义验证码输入框 **0 &#63; (mMaxLength - 1) : 0); // 判断宽度是否小于自定义宽度 width = width
使用
<*.*.*.widget.CodeInputView android:id="@+id/mCodeInputView" android:layout_ android:layout_ android:layout_centerInParent="true" android:layout_marginTop="56mm" android:maxLength="5" android:text="156" android:textSize="48mm" app:border app:borderSpacing="24mm" app:border />
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。