TextView 高亮字体局部点击

Posted dx我是大雄

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TextView 高亮字体局部点击相关的知识,希望对你有一定的参考价值。

如题  点击TextView中的某个高亮区域响应点击事件



简单的封装了下,成下面几个类


CommonUtil.java

public class CommonUtil 

    /**
     *  Fistly before call this method you should below method first to make sure no backgroud color
     *  when you click
     *  textView.setHighlightColor(getResources().getColor(android.R.color.transparent));
     *
     *  finally dont forget to call below to make sure click enable
     *  textView.setMovementMethod(LinkMovementMethod.getInstance());
     *
     * */
    public static SpannableString generateAreaClickString(View.OnClickListener onClickListener ,String completeStr, String highLightStr, Context context,boolean needUnderLine)

        if(completeStr != null && !completeStr.equals(""))
            SpannableString spanableInfo = new SpannableString(completeStr);
            int index = completeStr.lastIndexOf(highLightStr);
            if(index != -1)
                spanableInfo.setSpan(new SpanAreaClick(onClickListener, context,needUnderLine),index,index+highLightStr.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
                return spanableInfo;
            
        
        return null;
    



SpanAreaClick.java

public class SpanAreaClick extends ClickableSpan 
    private final View.OnClickListener mListener;
    private Context mContext;
    private boolean mNeedUnderLine;

    public SpanAreaClick(View.OnClickListener l, Context context ,boolean needUnderLine) 
        mListener = l;
        mContext = context;
        mNeedUnderLine = needUnderLine;
    

    @Override
    public void onClick(View v) 
        mListener.onClick(v);
    

    @Override
    public void updateDrawState(TextPaint ds) 
        ds.setColor(mContext.getResources().getColor(R.color.colorPrimary));
        ds.setUnderlineText(mNeedUnderLine);
    



MainActivity.java

public class MainActivity extends AppCompatActivity 

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView textView=(TextView) findViewById(R.id.tv_content);

//        to make sure no backgroud color when click
        textView.setHighlightColor(getResources().getColor(android.R.color.transparent));
        SpannableString spanableInfo = CommonUtil.generateAreaClickString(new View.OnClickListener() 
            @Override
            public void onClick(View view) 
                Toast.makeText(MainActivity.this, "super man", Toast.LENGTH_SHORT).show();
            
        ,"Hello I am super . How are you doing.","super",MainActivity.this,true);

        textView.setText(spanableInfo);
//        to make sure clickable
        textView.setMovementMethod(LinkMovementMethod.getInstance());
    












以上是关于TextView 高亮字体局部点击的主要内容,如果未能解决你的问题,请参考以下文章

spnnableBuilder 实现Android 表情 高亮字体 及 点击事件

spnnableBuilder 实现Android 表情 高亮字体 及 点击事件

word对空格进行高亮显示标记

TextView系列:TextView的高亮和置灰状态

怎样设置securecrt为高亮

textView输入中文时和高亮英文输入法时的字数统计