自定义数字密码EditText输入框
2016-08-10 15:25
666 查看
public class DigitPasswordView extends EditText { private static final String TAG = DigitPasswordView.class.getName(); private static float DEFAULT_LINE_WIDTH = 3;//默认线框宽度 private static final int DEFAULT_LINE_COLOR = Color.BLACK;//默认线框颜色 private static final float DEFAULT_TEXT_SIZE = 15; private static final String DEFAULT_PASS_SHOW = "*"; private float lineWidth = DEFAULT_LINE_WIDTH; private int lineColor = DEFAULT_LINE_COLOR; private int textColor = DEFAULT_LINE_COLOR; private float textSize = DEFAULT_TEXT_SIZE; private final String pass = DEFAULT_PASS_SHOW; private int mCount = 6; private Paint mPaint; public DigitPasswordView(Context context) { super(context); } public DigitPasswordView(Context context, AttributeSet attrs) { super(context, attrs); //初始化 this.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_PASSWORD); this.setBackgroundColor(Color.TRANSPARENT); this.setCursorVisible(false); this.setPadding(0, 0, 0, 0); mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); final TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.DigitPasswordView); lineWidth = typedArray.getDimension(R.styleable.DigitPasswordView_lineWidth, DEFAULT_LINE_WIDTH); lineColor = typedArray.getColor(R.styleable.DigitPasswordView_lineColor, DEFAULT_LINE_COLOR); textColor = typedArray.getColor(R.styleable.DigitPasswordView_textColor, DEFAULT_LINE_COLOR); textSize = typedArray.getDimension(R.styleable.DigitPasswordView_textSize, DEFAULT_TEXT_SIZE); typedArray.recycle(); mPaint.setStrokeWidth(lineWidth); mPaint.setTextSize(textSize); } public DigitPasswordView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void onDraw(Canvas canvas) { // super.onDraw(canvas); int w = getMeasuredWidth(); int h = getMeasuredHeight(); int cellW = w / mCount; //绘制背景线框 mPaint.setStyle(Paint.Style.STROKE); mPaint.setColor(lineColor); float dx = lineWidth / 2; canvas.drawRect(dx, dx, w - dx, h - dx, mPaint); canvas.save(); for (int i = 0; i < mCount - 1; i++) { canvas.translate(cellW, 0); canvas.drawLine(0, 0, 0, h, mPaint); } canvas.restore(); //绘制内容 mPaint.setStyle(Paint.Style.FILL); mPaint.setColor(textColor); canvas.save(); canvas.translate((cellW - mPaint.measureText(pass)) / 2, 0); Paint.FontMetrics metrics = mPaint.getFontMetrics(); float y = (int) (h / 2 + Math.abs((metrics.ascent + metrics.descent) / 2)); for (int i = 0; i < getText().length(); i++) { canvas.drawText(pass, 0, y, mPaint); canvas.translate(cellW, 0); } canvas.restore(); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { // super.onMeasure(widthMeasureSpec, heightMeasureSpec); int width = measureWidth(widthMeasureSpec); int height = measureHeight(heightMeasureSpec); setMeasuredDimension(width, height); } private int measureWidth(int widthMeasureSpec) { int mode = MeasureSpec.getMode(widthMeasureSpec); int size = 0; switch (mode) { case MeasureSpec.EXACTLY: size = MeasureSpec.getSize(widthMeasureSpec); break; case MeasureSpec.AT_MOST: StringBuilder sb = new StringBuilder(); for (int i = 0; i < mCount; i++) { sb.append(" " + pass + " "); } size = (int) mPaint.measureText(sb.toString()); size += (mCount + 1) * lineWidth; break; } return size; } private int measureHeight(int heightMeasureSpec) { int mode = MeasureSpec.getMode(heightMeasureSpec); int size = 0; switch (mode) { case MeasureSpec.EXACTLY: size = MeasureSpec.getSize(heightMeasureSpec); break; case MeasureSpec.AT_MOST: Paint.FontMetrics metrics = mPaint.getFontMetrics(); size = (int) (metrics.bottom - metrics.top + 2 * lineWidth) + 1; break; } return size; } }
<?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="DigitPasswordView"> <attr name="lineColor" format="color|reference"/> <attr name="lineWidth" format="dimension|reference"/> <attr name="textColor" format="color|reference"/> <attr name="textSize" format="dimension|reference"/> </declare-styleable> </resources>
“`
“`
相关文章推荐
- android小知识之EditText输入框之值监控以及类型限制(数字,英语字母,下划线,是否为星号密码)
- Android 重写EditText自定义密码输入框
- android控件之EditText输入框之值监控以及类型限制(数字,英语字母,下划线,是否为星号密码)
- 使用ImageView 加上 Edittext做出自定义的输入框(EditText美化)
- Android完美解决输入框EditText隐藏密码打勾显示密码问题
- 单机版APP记住密码功能的实现及EditText的输入框背景设置
- Android之EditText 为密码输入框时,密码的显示与隐藏
- Android EditText 密码输入框可见性设置
- Android 自定义EditText输入框 带清空按钮
- XEditText:带删除功能的EditText;可设置自动添加分隔符分割电话号码、银行卡号等;支持禁止Emoji表情符号输入;自定义右边显示图标作功能选项;仿iOS输入框风格
- Android完美解决输入框EditText隐藏密码打勾显示密码问题
- Android完美解决输入框EditText隐藏密码打勾显示密码问题
- Android完美解决输入框EditText隐藏密码打勾显示密码问题
- 在EditText中弹出数字键盘输入密码
- 自定义输入dialog,圆角边框,去掉底部黑色背景。去掉editText黄色输入框。
- Android之EditText只能输入数字或自定义字符
- Android完美解决输入框EditText隐藏密码打勾显示密码问题
- Android文本输入框(EditText)切换密码的显示与隐藏
- Android文本输入框(EditText)切换密码的显示与隐藏
- Android完美解决输入框EditText隐藏密码打勾显示密码问题