我使用BackgroundColorSpan使用以下代码行突出显示一些文本TextView
SpannableString text = new SpannableString(textView.getText());
text.setSpan(new BackgroundColorSpan(Color.YELLOW),start, end, Spanned.SPAN_INCLUSIVE_INCLUSIVE);
textView.setText(text, TextView.BufferType.SPANNABLE);
但是当我选择这些文本时,BackgroundColorSpan 会隐藏文本选择颜色,如屏幕截图中所示。我希望文本选择颜色显示在BackgroundColorSpan 上。有什么解决办法吗?
最佳答案
因为 SpannableString 是由 TextView 渲染的,并且文本选择是由上下文 ActionMode 控制的,所以我认为没有一种简单的方法可以让它们一起工作。不过有一个解决方法。
解决方案的第一部分是实现 CustomSelectionModeCallback 以获取当前选择的文本部分。
textView.setCustomSelectionActionModeCallback(new ActionMode.Callback() {
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
//
// This function is called whenever the selected text is
// changed, so you can use this to keep track of which part
// the text is currently selected
//
int start = textView.getSelectionStart();
int end = textView.getSelectionEnd();
String slectedText =textView.getText().toString().substring(start, end));
return true;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
return false;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
}
});
解决方案的第二部分是计算所选文本与当前由 SpannableString 高亮显示的文本之间的交集,而不是突出显示相交的部分。由于您可能需要在运行时更改此设置,因此您可能需要使用 SpannableStringBuilder 。
关于java - BackgroundColorSpan隐藏文本选择颜色android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38059029/