现在的项目中,可能Android自带的输入框已经满足不了需求了,比如说密码框等等,今天就搞几个自定义的输入框,望大家指正。
参考来自YU SplitEdittextView
如上效果图,有三种自定义输入框:
- 分割的方形输入框
- 下划线式的输入框
- 连在一起的方形输入框
输入的内容也有两种形式:
- 密码式的
- 明文展示的
在自定义attr.xml文件中中定义了一些属性属性。
<!-- 密码 验证码输入框-->
<declare-styleable name="SplitEditTextView">
<!--边框大小-->
<attr name="borderSize" format="dimension" />
<!--边框颜色-->
<attr name="borderColor" format="color|reference" />
<!--圆角大小-->
<attr name="cornerSize" format="dimension" />
<!--分割线大小-->
<attr name="divisionLineSize" format="dimension" />
<!--分割线颜色-->
<attr name="divisionLineColor" format="reference|color" />
<!--内容显示为圆的半径-->
<attr name="circleRadius" format="dimension" />
<!--输入内容数量-->
<attr name="contentNumber" format="integer" />
<!--输入内容显示样式-->
<attr name="contentShowMode" format="enum">
<!--显示成密码圆-->
<enum name="password" value="1" />
<!--显示成文本-->
<enum name="text" value="2" />
</attr>
<!--单个输入框和下划线样式下,每个输入框之间的间距-->
<attr name="spaceSize" format="dimension" />
<!--输入框样式-->
<attr name="inputBoxStyle" format="enum">
<!--输入框整体相连的样式-->
<enum name="connectBox" value="1" />
<!--单个输入框样式-->
<enum name="singleBox" value="2" />
<!--下划线样式-->
<enum name="underline" value="3" />
</attr>
<!--密码字体颜色-->
<attr name="android:textColor" />
<!--密码字体大小-->
<attr name="android:textSize" />
<!--输入框是否是正方形-->
<attr name="inputBoxSquare" format="boolean" />
<!--光标宽度-->
<attr name="cursorWidth" format="dimension" />
<!--光标高度-->
<attr name="cursorHeight" format="dimension" />
<!--光标颜色-->
<attr name="cursorColor" format="color|reference" />
<!--光标闪烁时长-->
<attr name="cursorDuration" format="integer" />
<!--下划线输入框样式下,下划线正常的颜色-->
<attr name="underlineNormalColor" format="reference|color" />
<!--下划线输入框样式下,下划线获取焦点时颜色-->
<attr name="underlineFocusColor" format="reference|color" />
</declare-styleable>
无非就是一些字体颜色、字体大小、输入框类型、输入框内容展示形式等,详情可以看代码注释。
下边开始上代码
- 首先,做一些初始化的工作,获取attr属性,初始化画笔等工作
private void initAttrs(Context c, AttributeSet attrs) {
TypedArray array = c.obtainStyledAttributes(attrs, R.styleable.SplitEditTextView);
mBorderSize = array.getDimension(R.styleable.SplitEditTextView_borderSize, dp2px(1f));
mBorderColor = array.getColor(R.styleable.SplitEditTextView_borderColor, Color.BLACK);
mCornerSize = array.getDimension(R.styleable.SplitEditTextView_cornerSize, 0f);
mDivisionLineSize = array.getDimension(R.styleable.SplitEditTextView_divisionLineSize, dp2px(1f));
mDivisionColor = array.getColor(R.styleable.SplitEditTextView_divisionLineColor, Color.BLACK);
mCircleRadius = array.getDimension(R.styleable.SplitEditTextView_circleRadius, dp2px(5f));