gpt4 book ai didi

java - 使用 BackgroundColorSpan 时光标不可见

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:24:57 25 4
gpt4 key购买 nike

我正在使用 BackgroundColorSpan 来突出显示 EditText 中的某些文本。我遇到的问题是,如果颜色具有 100% 的 alpha,则文本字段的光标不可见,并且很难用较低的 alpha 看到。

我已经深入研究了 EditTextEditor 的代码(用于在 EditText 中绘制文本)并且我已经发现在 Editor.onDraw(...) 中,光标在 Layout 之前绘制(Layout 依次绘制文本):

    if (highlight != null && selectionStart == selectionEnd && mCursorCount > 0) {
>> drawCursor(canvas, cursorOffsetVertical);
// Rely on the drawable entirely, do not draw the cursor line.
// Has to be done after the IMM related code above which relies on the highlight.
highlight = null;
}

if (mTextView.canHaveDisplayList() && canvas.isHardwareAccelerated()) {
drawHardwareAccelerated(canvas, layout, highlight, highlightPaint,
cursorOffsetVertical);
} else {
>> layout.draw(canvas, highlight, highlightPaint, cursorOffsetVertical);
}

有人知道我该如何扭转这种行为吗?目前我能想到的唯一选择是自己绘制光标或做一些反射巫术。两者似乎都有些矫枉过正。


更新:

我已经在 Android 问题跟踪器上为此创建了一个错误报告:https://code.google.com/p/android/issues/detail?id=172001

最佳答案

我最终采用的解决方案是创建两个扩展。一个 EditText 和另一个 BackgroundColorSpan

BackgroundColorSpan 的扩展不会简单地改变updateDrawState()TextPaint 的背景颜色,但它允许外部类访问这样的颜色。

EditText 的扩展查找特殊的 BackgroundColorSpan 并在调用 super 实现之前在 onDraw() 中手动绘制背景。

这个要点显示了完整的解决方案(需要创建导入):

https://gist.github.com/pablisco/d9dc57cc2e9dc85d24de

注意:如果 span 被保存和恢复(例如旋转),它不能很好地播放,因此在恢复时可能必须操纵 spans。

关于java - 使用 BackgroundColorSpan 时光标不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29973354/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com