我有一个非常简单的自定义EditText,如下所示:
public class MyEditText extends EditText {
private Paint mPaint;
public MyEditText(Context context) {
super(context);
init();
}
public MyEditText(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public MyEditText(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
setSingleLine();
mPaint = new Paint();
mPaint.setColor(Color.RED);
mPaint.setStrokeWidth(6);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
int y = canvas.getHeight() * 6 / 7;
canvas.drawLine(0, y, canvas.getWidth(), y, mPaint);
}
}
当我设置单行模式时,当文本很短时,一切都很好,它看起来像这样:
但是一旦文本变得更长(超过EditText的宽度),红线就会像这样向左移动:
你可能会注意到我使用了0和canvas.getWidth()来连接视图的两边,但是这条线被移动了,所以这不是说整个画布也会被移动吗?
如果是这样,这是一种奇怪的行为,我没想到View后代。有人能否解释一下这种奇怪的行为?
由于
答案 0 :(得分:0)
更改您的onDraw()
方法,如下所示......
@Override
protected void onDraw(Canvas canvas) {
Rect r = new Rect();
int baseline = getLineBounds(0, r);
int y = canvas.getHeight() * 6 / 7;
canvas.drawLine(r.left, y, r.right, y, mPaint);
super.onDraw(canvas);
}