Android高亮TextView某个单词


想在TextView里高亮一些指定的单词。
就是浏览器里那种搜索高亮关键词的样子
EditView里做过高亮,TextView里怎么弄?

Android textview

灰色的痕迹 11 years, 7 months ago

前两天同样遇到这个问题,后来解决了,使用Spannable即可搞定。

这里有一个参考案例:

请输入图片描述

package com.zhou.activity;  

import android.app.Activity;  
import android.graphics.Color;  
import android.os.Bundle;  
import android.text.Spannable;  
import android.text.SpannableString;  
import android.text.Spanned;  
import android.text.method.LinkMovementMethod;  
import android.text.style.BackgroundColorSpan;  
import android.text.style.ForegroundColorSpan;  
import android.text.style.StyleSpan;  
import android.text.style.URLSpan;  
import android.widget.TextView;  

public class TextViewLinkActivity extends Activity {  
    TextView myTextView;  
    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.main);  
        myTextView = (TextView) this.findViewById(R.id.myTextView);  

        //创建一个 SpannableString对象  
        SpannableString sp = new SpannableString("这句话中有百度超链接,有高亮显示,这样,或者这样,还有斜体.");  
        //设置超链接  
        sp.setSpan(new URLSpan("http://www.baidu.com"), 5, 7,  
                Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  
        //设置高亮样式一  
        sp.setSpan(new BackgroundColorSpan(Color.RED), 17 ,19,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);  
        //设置高亮样式二  
        sp.setSpan(new ForegroundColorSpan(Color.YELLOW),20,24,Spannable.SPAN_EXCLUSIVE_INCLUSIVE);    
        //设置斜体  
        sp.setSpan(new StyleSpan(android.graphics.Typeface.BOLD_ITALIC), 27, 29, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);  
        //SpannableString对象设置给TextView  
        myTextView.setText(sp);  
        //设置TextView可点击  
        myTextView.setMovementMethod(LinkMovementMethod.getInstance());  
    }  
}

原文链接: http://lovezhou.iteye.com/blog/905446

Spannalbe文档:

Spannalbe
This is the interface for text to which markup objects can be attached and detached. Not all Spannable classes have mutable text; see Editable for that.

setSpan方法:

public abstract void setSpan (Object what, int start, int end, int flags)

Since: API Level 1
Attach the specified markup object to the range start…end of the text, or move the object to that range if it was already attached elsewhere. See Spanned for an explanation of what the flags mean. The object can be one that has meaning only within your application, or it can be one that the text system will use to affect text display or behavior. Some noteworthy ones are the subclasses of CharacterStyle and ParagraphStyle, and TextWatcher and SpanWatcher.

http://developer.android.com/referenc...

好杯具是也.. answered 11 years, 7 months ago

Your Answer