Android实现部分文字可点击及变色

可以使用SpannableString和ClickableSpan:

        TextView userAgreement = findViewById(R.id.user_agreement);
        SpannableString agreement = new SpannableString("Agree to the User Agreement and Privacy Policy");
        agreement.setSpan(new MyClickableSpan("User Agreement"), 13, 27, SpannableString.SPAN_INCLUSIVE_INCLUSIVE);
        agreement.setSpan(new MyClickableSpan("Privacy Policy"), 32, 46, SpannableString.SPAN_INCLUSIVE_INCLUSIVE);
        userAgreement.setText(agreement);
        userAgreement.setMovementMethod(LinkMovementMethod.getInstance());

上面代码中setMovementMethod这一句是固定的,必须添加,否则点击没效果。这里setSpan方法有四个参数:

//what:要加何种样式或功能
//start:开始加样式的位置
//end:结束加样式的位置
//flags:是否包含开始和结束位置的字符
public void setSpan (Object what, int start, int end, int flags)

其中start参数和end参数的确定有个小技巧,就是Android Studio当你在源代码窗格选择了一段文字,底部状态栏会自动出现字符个数,这样省着一个一个数字符的麻烦。

MyClickableSpan代码如下:

    static class MyClickableSpan extends ClickableSpan {

        private String text;

        public MyClickableSpan(String text) {
            this.text = text;
        }

        @Override
        public void onClick(@NonNull View view) {
            Toast.makeText(view.getContext(), text, Toast.LENGTH_SHORT).show();
        }

        @Override
        public void updateDrawState(@NonNull TextPaint ds) {
            super.updateDrawState(ds);
            ds.setColor(Color.parseColor("#ff3783"));
            ds.setUnderlineText(false);
        }
    }

 

你可能感兴趣的:(小知识)