【发布时间】:2018-06-22 12:14:14
【问题描述】:
我有一个自定义的 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());。它将光标绘制在正确的位置。但这使我无法在触摸事件上更改光标位置。
【问题讨论】:
-
不要在onDraw中设置光标位置。设置焦点监听器,并在获得焦点时设置它。
-
@GabeSechan 它允许我改变光标位置,这与 onDraw 方法不同。但是当第一次渲染视图时,光标仍然在错误的位置。
-
然后在创建时也调用它
-
@GabeSechan 创建时间?你的意思是什么时候调用构造函数?我相信之后会调用 onDraw 并将光标绘制在错误的位置。
-
为什么会把它画在错误的位置?它会在你设置的地方绘制它。它根本不应该在绘制时设置位置
标签: android android-edittext android-custom-view