设置单行时,EditText的onDraw画布会向左移动

时间:2015-05-25 03:00:45

标签: android canvas android-edittext

我有一个非常简单的自定义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);
    }
}

当我设置单行模式时,当文本很短时,一切都很好,它看起来像这样:

enter image description here

但是一旦文本变得更长(超过EditText的宽度),红线就会像这样向左移动:

enter image description here

你可能会注意到我使用了0和canvas.getWidth()来连接视图的两边,但是这条线被移动了,所以这不是说整个画布也会被移动吗?

如果是这样,这是一种奇怪的行为,我没想到View后代。有人能否解释一下这种奇怪的行为?

由于

1 个答案:

答案 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);
    }