解决EditText光标定位问题
需求:
有时候我们的需求是让输入从右边开始,如下图,这是产品和ux需要的

在正常的通过xml布局后,在有的机型上可能显示为:| Hometown
有些是设置属性的方式来修改这个bug,但是比较稳妥的是自己定义一个EditText,自己画一个Cursor
如下代码,直接copy进项目可直接使用:
public class CursorEditText extends AppCompatEditText {
private CharSequence mHint;
private Paint mPaint;
private int mHintTextColor;
public CursorEditText(Context context) {
this(context, null);
}
public CursorEditText(Context context, AttributeSet attrs) {
this(context, attrs, android.support.v7.appcompat.R.attr.editTextStyle);
}
public CursorEditText(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context, attrs, defStyleAttr);
}
private void init(Context context, AttributeSet attrs, int defStyleAttr) {
mHint = getHint();
setHint("");
mPaint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.DITHER_FLAG);
mPaint.setTextSize(getTextSize());
mPaint.setTextAlign(Paint.Align.RIGHT);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
if (TextUtils.isEmpty(mHint) || !TextUtils.isEmpty(getText())) {
return;
}
canvas.save();
ColorStateList hintTextColors = getHintTextColors();
if (hintTextColors != null) {
int color = hintTextColors.getColorForState(getDrawableState(), 0);
if (color != mHintTextColor) {
mHintTextColor = color;
mPaint.setColor(color);
}
}
Paint.FontMetricsInt fontMetrics = mPaint.getFontMetricsInt();
int baseline = (getHeight() - fontMetrics.bottom + fontMetrics.top) / 2 - fontMetrics.top;
canvas.drawText(mHint, 0, mHint.length(),getWidth() - getPaddingRight() + getScrollX(), baseline, mPaint);
canvas.restore();
}
}
上面代码最重要的是:
canvas.drawText
本文介绍如何解决EditText在内容显示在右边时,光标仍出现在hint左边的问题。通过创建自定义EditText并绘制光标,确保光标在输入内容的右侧。提供了一段可直接使用的代码示例。
671

被折叠的 条评论
为什么被折叠?



