我有一个自定义EditText。它具有不可编辑的前缀和后缀,以及可编辑的中间部分。问题是默认光标位置始终位于可编辑文本的开头,如下面的屏幕截图所示。
这是我的自定义视图的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());
。它将光标绘制在正确的位置。但这使我无法在触摸事件上更改光标位置。
答案 0 :(得分:2)
当视图附加到窗口时调用此方法。此时,它具有一个Surface并将开始绘制。请注意,可以确保在onDraw(android.graphics.Canvas)之前调用此函数,但是可以在第一个onDraw之前的任何时间调用此函数-包括在onMeasure(int,int)之前或之后。
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
setSelection(getText().toString().length());//set your cursor position
}