android - 获取光标当前行EditText的屏幕坐标


问题描述

我想在EditText中突出显示光标所在的行。我有一个半透明的View,它将在线上进行。我需要在EditText中获取屏幕上的字符坐标。 (第一行和最后一行)我发现最好的是获得文本尺寸,但这不能用于我想要的。我什么都没试过,因为我不知道从哪里开始。

这可能吗? 如果没有,我该怎么办?

最佳答案

这可以通过继承EditText并在其onDraw()方法中插入高亮效果来完成,然后再绘制其他所有内容。EditTextLayout对象可以给我们从当前光标位置开始的行号,我们可以通过Rect获得边界。然后我们绘制高亮矩形,并调用super方法来绘制View的其余部分。

例如:

public class HighlightEditText extends EditText {

    private static final int HIGHLIGHTER_YELLOW = 0x88f3f315;

    private Rect lineBounds;
    private Paint highlightPaint;
    private int lineNumber;
    private boolean lineHighlightEnabled = true;

    public HighlightEditText(Context context) {
        this(context, null);
    }

    public HighlightEditText(Context context, AttributeSet a) {
        super(context, a);

        lineBounds = new Rect();
        highlightPaint = new Paint();
        highlightPaint.setColor(HIGHLIGHTER_YELLOW);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        if (lineHighlightEnabled) {
            lineNumber = getLayout().getLineForOffset(getSelectionStart());
            getLineBounds(lineNumber, lineBounds);

            canvas.drawRect(lineBounds, highlightPaint);
        }

        super.onDraw(canvas);
    }

    public void setLineHighlightEnabled(boolean enabled) {
        lineHighlightEnabled = enabled;
        invalidate();
    }

    public boolean isLineHighlightEnabled() {
        return lineHighlightEnabled;
    }

    public void setLineHighlightColor(int color) {
        highlightPaint.setColor(color);
        if (lineHighlightEnabled) {
            invalidate();
        }
    }

    public int getLineHighlightColor() {
        return highlightPaint.getColor();
    }
}

您可以像往常一样在布局中包含此自定义类。例如:

<com.mycompany.myapp.HighlightEditText
    android:id="@+id/edit"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="top|left"
    android:imeOptions="flagNoExtractUi" />

请注意,如果您使用 AppCompat 库及其便利设施,则应改为扩展 AppCompatEditText,以确保正确处理着色和其他内容。

原文: Get screen coordinates of cursor current line EditText

声明:HEUE NOTE|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA 4.0协议进行授权

转载:转载请注明原文链接 - android - 获取光标当前行EditText的屏幕坐标