本篇 Blog 记载自定义 EditText 结束矩形暗码框

Android View自定义EditText完成矩形暗码框

全体思路大致如下:

  1. 制作边框
  2. 制作分割线
  3. 制作黑色圆形
  4. 输入监听处理

下面按照上述步骤顺次进行,在此之前,先做好准备工作。

准备工作

在开工之前,咱们需求先在 attrs.xml 中定义相关特征

	<declare-styleable >
<attgit教程r  />
<attr  />
<attr  />
<attr  />
<attr  />
<attr  /giti轮胎>
<attrgit教程  />
<attr  />
</declare-styleable>

上面的特征分别阐明作用

inputMaxNumgithub中文社区:可输入长度,默认GitHub是 6,六位暗码
roundAngle:矩形暗码github永久回家地址框的圆角
borderColor:矩形边框颜色
divinggithub打不开Color:分割线颜色
circleCoandroid开发lor:圆形字符颜色
borderWidth:矩形边框宽度
divingWidth:分割线宽度
circleRadius:圆形半径

设置好approve了款Git式特征,初始化边框、分割线和画圆的 Paappointmentint

	/**github打不开
* Initandroidstudio安装教程ial Paingithub直播渠道永久回家t
*/
private void initPaint() {
// 抗锯齿
bordercanvas网页版Paint = new Paint(Paint.canvas翻译ANTI_ALIAS_FLAG);
borderPaint.setAntandroidstudio安装教程iAlias(true);
// 设置画github怎样下载文件笔宽度
borderPaint.setStrokeWidth(borderWidcanvas网页版th)github中文官网网页;
/giti轮胎/ 设置画笔风格
borderPaint.setStyle(Paint.Style.STROKE);
// 设置画笔颜色
borderPaint.setColor(borderColor);
// 分割线画笔
diviGitngPaint = new Paint(Paint.ANTI_ALIAandroidstudio安装教程S_FLAG);
divingPaint.setAngithub怎样下载文件tiAlias(true);
divingPaint.setStrokeWidthcanvas登录(lineWidth);
divingPainCanvast.setColor(divingColor);
dcanvasivingPaandroid开发int.setStyle(Paint.Style.FILL);GitHub
// 圆心画笔
circlePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
circlePaint.setAntiAlias(true);
circlePaint.setStyle(Paint.Style.FILL);
circlePAPPaintgithub中文官网网页.setColor(circleCogithub永久回家地址lor);
circlePaint.setStrokeWidth(radius);
}

下面正式开端

制作边框

咱们需求在 onDapp安装下载raw() 办法中制作矩形边框

分别传入 RectF 矩形方针、圆角值和画android是什么手机牌子

		// 制作圆角矩形
canvas.drawRoundRect(rectF, roundAcanvas软件ngle, roundAngle, bordappearerPaincanvas下载t);

制作分割线

制作分割线时,这儿要注意,六个暗码框是五条线

咱们需求传入起始点、结束github永久回家地址点和画笔参数进行制作

		// 制作分割线,5个分割线
for (int i = 1; i < count; i++)android开发 {
canvas.drawLinecanvas网页版(divingWidth * i, 0, divingWigithub敞开私库dth * i, height, divingPaint)appreciate;
}

制作圆形

毕竟咱们要制作圆点来替代输入的字符。

这儿要注意的是,咱们制作的圆点的个数是需求根据咱们输入的字符的个数来判别
即:position 是其时输入的字符个数的坐标

		// 制作圆形点
for (int i = 0; i < position; i++) {
canvas.drawCircle(startX * (2 * i + 1), startY, radius, circlePaint)APP;
}

输入监听处理

在咱们制作结束后,只要对输appear入进行处理就 OK 了。只要在输入后,让制作圆点的办法进行制作就能够了。

这儿咱们在 onTextChanged 办法canvas软件中进行处理。重写该办法,这儿处理比较简单,判别输入的长度,之前现已设置了最大输入数。

	@Override
protected void ogithub中文官网网页nTextChanged(CharSequence text, int start, int lengthBefore, int lenapp安装下载gthAfter) {
super.onTextChanged(text, start, lengthBefore,github lengandroid的drawable类thAfter);
// 获取其时输入方位
position = text.length();
}

到这儿,根本整个 View 都APP现已结束。下面说下运用。github中文社区

运用

		<com.xxxx.ui.PasswordEditTextcanvas的中文意思
android:id="@+id/pet_update_pay_pwd"
androigithub是干什么的d:layout_width="300dp"
android:layout_height="50dp"
android:layout_marginTop="20dp"
app:inputMaxNum="6"
andrcanvasoid:inpappstoreutType="numberPagithub永久回家地址ssworandroid下载d"
android:background="@null"
app:layout_constraintStart_toSgithub官网tartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_updategithub永久回家地址_pay_pwd_tcanvasips" />

android是什么手机牌子以看到和运用体系控件没有差异,其间 inputMaxNum 是咱们在 attrs 中定义的特征,用于供认能够输入的字符的个数,这儿由于是六位暗码,所以是 6。

不同样式的键盘

趁便一提,关于键盘咱们也能够写成类似下面这姿势的,依然能够适用
Android View自定义EditText完成矩形暗码框
对于上面这种键盘,思路如下:

咱们需求写几个 TextView 放上面就能够了。只是在点击键盘区域后,对咱们原本的输入监听处理逻辑进行修改,在点击键盘区域后再进行制作暗码圆形就能够结束了。

毕竟附上无缺代码地址:

GItHub AndroidCustomView-PasswordEditText
趁便帮忙 star 一下更感谢!

参考文档

EditText 的 onTextChanged 详解github中文社区