如何在android中的textView中显示高亮字符串?

时间:2017-08-15 18:01:54

标签: android string listview textview

我正在构建一个android应用程序,我解析一组数据并在listView中显示。现在,当用户搜索该数据集中的单词时,我会突出显示该文本视图的单词。

现在的问题是当搜索词在开头时它显示为文本视图是最大第1行但是如果它是段落的中间单词的最后一个突出显示但我想在文本视图中显示该突出显示的单词最大线1。

有没有办法在文本视图中调整字符串并显示突出显示的区域。

2 个答案:

答案 0 :(得分:0)

您需要的是使用Spans。例如,您可以突出显示如下文字:

TextView textview = (TextView)findViewById(R.id.mytextview);
Spannable spannable = new SpannableString("Hello World");        
spannable.setSpan(new BackgroundColorSpan(Color.YELLOW), 0, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
textview.setText(spannable);

答案 1 :(得分:0)

我已经尝试过片段了。希望这会对你有所帮助。

final TextView sampleText =(TextView)findViewById(R.id.tv_sample_text);
EditText ed_texthere =(EditText)findViewById(R.id.ed_texthere);

final String fullText = sampleText.getText().toString();

ed_texthere.addTextChangedListener(new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

    }

    @Override
    public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
        String typedText = charSequence.toString();
        if (typedText != null && !typedText.isEmpty()) {
            int startPos = fullText.toLowerCase(Locale.US).indexOf(typedText.toLowerCase(Locale.US));
            int endPos = startPos + typedText.length();
            if (startPos != -1) {
                Spannable spannable = new SpannableString(fullText);
                ColorStateList blueColor = new ColorStateList(new int[][]{new int[]{}}, new int[]{Color.BLUE});
                TextAppearanceSpan highlightSpan = new TextAppearanceSpan(null, Typeface.BOLD, -1, blueColor, null);
                spannable.setSpan(highlightSpan, startPos, endPos, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                sampleText.setText(spannable);
            } else {
                sampleText.setText(fullText);
            }
        }
    }

    @Override
    public void afterTextChanged(Editable editable) {

    }
});