自定义EditText默认光标位置

时间:2018-06-22 12:14:15

标签: android android-edittext android-custom-view

我有一个自定义EditText。它具有不可编辑的前缀和后缀,以及可编辑的中间部分。问题是默认光标位置始终位于可编辑文本的开头,如下面的屏幕截图所示。

screenshot

这是我的自定义视图的onDraw()

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    suffixXPosition = (int) (textPaint.measureText(getText().toString()) + leftPadding + textPaint.measureText(prefix));
    canvas.drawText(prefix, prefixXPosition, getBaseline(), textPaint);
    canvas.drawText(getText().toString(), stringXPosition, getBaseline(), textPaint);
    canvas.drawText(suffix, suffixXPosition, getBaseline(), textPaint);
}

这很基本。它只是在画布上绘制文本。

我希望在呈现EditText时光标出现在可编辑文本的结尾 我怎样才能做到这一点? 我希望视图本身能够处理这种情况。

我在onDraw方法中尝试了setSelection(getText().toString().length());。它将光标绘制在正确的位置。但这使我无法在触摸事件上更改光标位置。

1 个答案:

答案 0 :(得分:2)

尝试在onAttachedToWindow()

中设置光标位置
  

当视图附加到窗口时调用此方法。此时,它具有一个Surface并将开始绘制。请注意,可以确保在onDraw(android.graphics.Canvas)之前调用此函数,但是可以在第一个onDraw之前的任何时间调用此函数-包括在onMeasure(int,int)之前或之后。

@Override
    public void onAttachedToWindow() { 
        super.onAttachedToWindow(); 
        setSelection(getText().toString().length());//set your cursor position
    }