TextView 高亮字体局部点击

来源:互联网 发布:js文件格式化工具 编辑:程序博客网 时间:2024/05/16 09:29

如题  点击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
原创粉丝点击