其实也就是通过edittext 内容行数在绘制一条线
控制光标高度可以自定一个 shape:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<size
android:width="2dip" />
<solid
android:color="#d0d0d0" />
<padding
android:top="2sp"
android:bottom="-11sp" />
</shape>
在edittext 里面 加入引用自定义的shape : android:textCursorDrawable="@drawable/cursor_red"
import android.content.Context;
import android.graphics.Canvas;import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Rect;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.util.Log;
import android.widget.EditText;
public class UnderlineEditText extends InnerSrollViewEditText {
private static final String TAG = "UnderlineEditText";
private Paint mPaint;
private Rect mRect;
private float mult = 1.5f;
private float add = 2.0f;
private boolean isShowUnderLine = true;
public UnderlineEditText(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public UnderlineEditText(Context context) {
super(context);
init();
}
private void init() {
mRect = new Rect();
mPaint = new Paint();
mPaint.setStyle(Paint.Style.STROKE);
mPaint.setColor(Color.GRAY);
mPaint.setAntiAlias(true);
this.setLineSpacing(add, mult);
}
@Override
public void onDraw(Canvas canvas) {
Log.d(TAG, "func [onDraw]");
//控制是否显示下划线
if (isShowUnderLine) {
int count = getLineCount();
String content = getText().toString().trim();
for (int i = 0; i < count; i++) {
getLineBounds(i, mRect);
int baseline = 0;
if (TextUtils.isEmpty(content)) {
baseline = (i) * getLineHeight();
}else{
baseline = (i + 1) * getLineHeight();
}
canvas.drawLine(mRect.left, baseline-5, mRect.right, baseline-5, mPaint);
}
}
super.onDraw(canvas);
}
public void setIsShowUnderLine(boolean flag){
isShowUnderLine = flag;
}
}