2

我已经浏览了一些如何在TextView使用Spannable类中突出显示某些文本的解决方案。但它只允许突出显示由字符组成的片段。如果我想突出显示包含TextView' 宽度的文本行,但该行中的文本没有填满整个视图的宽度怎么办?

如果有人在这种情况下有经验,我很乐意接受建议。

更新:

好的,我希望下面的图片能让我的目标更加清晰。

这是我可以使用的方法Spannable

在此处输入图像描述

这就是我想要的:

在此处输入图像描述

我真的希望这很清楚。

4

4 回答 4

8

可能有一种更简单的方法可以做到这一点,但我相信你需要实现一个实现 LineBackgroundSpan 的类来做你想做的事。这是一些示例代码:

public class MyActivity extends Activity {

    private static class MySpan implements LineBackgroundSpan {
        private final int color;

        public MySpan(int color) {
            this.color = color;
        }

        @Override
        public void drawBackground(Canvas c, Paint p, int left, int right, int top, int baseline,
                int bottom, CharSequence text, int start, int end, int lnum) {
            final int paintColor = p.getColor();
            p.setColor(color);
            c.drawRect(new Rect(left, top, right, bottom), p);
            p.setColor(paintColor);
        }
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        final TextView tv = new TextView(this);
        setContentView(tv);

        tv.setText("Lines:\n", BufferType.EDITABLE);
        appendLine(tv.getEditableText(), "123456 123 12345678\n", Color.BLACK);
        appendLine(tv.getEditableText(), "123456 123 12345678\n", Color.RED);
        appendLine(tv.getEditableText(), "123456 123 12345678\n", Color.BLACK);
    }

    private void appendLine(Editable text, String string, int color) {
        final int start = text.length();
        text.append(string);
        final int end = text.length();
        text.setSpan(new MySpan(color), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    }
}
于 2012-05-20T19:13:58.340 回答
0

你可以android:padding="5dp"在你的 xml 布局文件中做,你可以通过 style xml 和 Spannable String 突出显示 noramlly 希望它会受到欢迎

TextView TV = (TextView)findViewById(R.id.text);
TV.setText("Italic, highlighted, bold.", TextView.BufferType.SPANNABLE);

Spannable WordtoSpan = (Spannable) TV.getText();

WordtoSpan.setSpan(new BackgroundColorSpan(0xFFFFFF00), 8, 19, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

TV.setText(WordtoSpan);

链接1

这可能会帮助你

于 2012-05-18T05:42:32.210 回答
0

将以下代码保存在可绘制文件夹中

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="<<your color code"/>
</shape>

并指定 textview 背景如下

android:background="@drawable/<<your file name>>"
于 2012-05-18T06:16:11.593 回答
0

您尝试做的事情可以使用StateListDrawable.

在触摸模式下让您的所有TextView's 聚焦。为 textview 的背景颜色和文本颜色定义 statelistdrawables,并requestFocus()在您想要突出显示 textview 时调用。

StateListDrawable 用于 textview 的背景:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item
     android:state_focused="true"
     android:drawable="#0F0" />

    <item android:drawable="#0000" />

</selector>

同样为文本颜色定义一个选择器列表。

于 2012-05-20T18:08:03.263 回答