java - BackgroundColorSpan隐藏文本选择颜色android

标签 java android

我使用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 上。有什么解决办法吗?

enter image description here

最佳答案

因为 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/

相关文章:

java - 如何连接到蓝牙服务器并发现服务?

android - 相对布局 : Many options if elements are GONE

android - 使用 URL 打开 View Microsoft Dynamics CRM 移动客户端(适用于手机)

Java 搜索包含双字母的单词

java - 如何在android中创建自定义开关控件

java - 广播接收器 - 在应用程序之间发送字符串

java - 插入替换数组中的其他插入 - Java

android - 如何将 ListView 实现为 fragment ?

java - 如何在 Java Android Studio 中验证日月和年,

android - Github 发布与 android studio 的集成