自定义EditText代码如下:
public class LineEditext extends EditText {
// 画笔 用来画下划线
private Paint paint;
public LineEditext(Context context, AttributeSet attrs) {
super(context, attrs);
paint = new Paint();
paint.setStyle(Paint.Style.STROKE);
paint.setColor(Color.RED);
// 开启抗锯齿 较耗内存
paint.setAntiAlias(true);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// 得到总行数
int lineCount = getLineCount();
// 得到每行的高度
int lineHeight = getLineHeight();
// 获取EditText中文字的物理长度
TextPaint mTextPaint = getPaint();
float textWidth = mTextPaint.measureText(getText().toString());
// 根据行数循环画线
for (int i = 0; i < lineCount; i++) {
int lineY = (i + 1) * lineHeight;
canvas.drawLine(0, lineY, textWidth, lineY, paint);
}
}
}
<com.an.myphotodemo.lineEditext.LineEditext
android:id="@+id/lineEdittext"
android:layout_width="match_parent"
android:layout_height="40dp"
android:background="@null"
android:lines="1"
android:textColor="@android:color/black"
android:textSize="15pt" />
1.setAntiAlias()
paint.setAntiAlias(true);
2.如何获取EditText文字的物理长度:
TextPaint mTextPaint = getPaint();
floattextWidth = mTextPaint.measureText(getText().toString());
3.当然,你如果相要布满整个edittext宽度的下划线也可以,
用
canvas.drawLine(0, lineY, this.getWidth(), lineY, paint);
替换
TextPaint mTextPaint = getPaint();
floattextWidth = mTextPaint.measureText(getText().toString());
就行了。
效果如下: