Java 使用BackgroundColorSpan时光标不可见
我正在使用Java 使用BackgroundColorSpan时光标不可见,java,android,android-edittext,Java,Android,Android Edittext,我正在使用BackgroundColorSpan突出显示EditText中的某些文本。我遇到的问题是,如果颜色有100%的alpha,文本字段的光标不可见,并且很难用较低的alpha看到 我对EditText和EditText(用于在EditText中绘制文本)的代码进行了一些挖掘,发现在Editor.onDraw(…)中,光标在布局之前绘制(布局反过来绘制文本): 有人知道我怎样才能扭转这种行为吗?目前我唯一能想到的选择是自己画光标或者做一些反射巫毒。两者似乎都有点过分了 更新: 我已经在A
BackgroundColorSpan
突出显示EditText
中的某些文本。我遇到的问题是,如果颜色有100%的alpha,文本字段的光标不可见,并且很难用较低的alpha看到
我对EditText
和EditText
(用于在EditText
中绘制文本)的代码进行了一些挖掘,发现在Editor.onDraw(…)
中,光标在布局之前绘制(布局反过来绘制文本):
有人知道我怎样才能扭转这种行为吗?目前我唯一能想到的选择是自己画光标或者做一些反射巫毒。两者似乎都有点过分了
更新:
我已经在Android问题跟踪器上为此创建了一个bug报告:我最终的解决方案是创建两个扩展。一个是EditText,另一个是
背景色span
BackgroundColorSpan
的扩展并不改变updateDrawState()
中TextPaint
的背景色,但它允许外部类访问这种颜色
EditText的扩展将查找特殊的BackgroundColorSpan
,并在调用超级实现之前在onDraw()中手动绘制背景
此要点显示了完整的解决方案(需要创建导入):
注意:如果跨度被保存和恢复(例如在旋转时),则效果不好,因此在恢复时可能需要操纵跨度。此功能有什么新功能吗?该链接已被删除。
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);
}