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());
    }


}










  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值