android 实现TextView文件局部高亮并且可以点击

该篇简单的示例如何使用ClickableSpan
如果需要详细封装方法,请关注下一篇

MyClickSpan .java文件

import android.graphics.Color;
import android.text.TextPaint;
import android.text.style.ClickableSpan;
import android.view.View;

public class MyClickSpan extends ClickableSpan {

    private int mHighLightColor = Color.RED;

    private boolean mUnderLine = false;

    private View.OnClickListener mClickListener;


    public MyClickSpan(View.OnClickListener listener)

    {

        this.mClickListener = listener;

    }


    public MyClickSpan(int color, boolean underline, View.OnClickListener listener)

    {

        this.mHighLightColor = color;

        this.mUnderLine = underline;

        this.mClickListener = listener;

    }


    @Override

    public void onClick(View widget)

    {

        if (mClickListener != null)

            mClickListener.onClick(widget);

    }


    @Override

    public void updateDrawState(TextPaint ds)

    {

        ds.setColor(mHighLightColor);

        ds.setUnderlineText(mUnderLine);

    }

}

public static void setTextHighLightWithClick(TextView tv, String text, String keyWord, View.OnClickListener listener)
    {

        tv.setClickable(true);

        tv.setHighlightColor(Color.TRANSPARENT);

        tv.setMovementMethod(LinkMovementMethod.getInstance());


        SpannableString s = new SpannableString(text);

        Pattern p = Pattern.compile(keyWord);

        Matcher m = p.matcher(s);

        while (m.find())

        {

            int start = m.start();

            int end = m.end();

            s.setSpan(new MyClickSpan(listener), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

        }


        tv.setText(s);

    }

      setTextHighLightWithClick(tv, "已经同步至服务器,忽略该请求", "请求", new View.OnClickListener() {
            @Override
            public void onClick(View view) {
               // to do
            }
        });

你可能感兴趣的:(android)