TextView中用户协议和隐私政策字体改变颜色和可点击

今天公司接到了通知,需要在APP中加上关于用户协议和隐私政策的弹框,需要将“用户协议”和“隐私政策”变色和加点击状态。想到了用SpannableStringBuilder来做,将用到的方法和遇到的问题记录一下。

  String msg2 = "《用户协议》";
  SpannableStringBuilder spannable1 = new SpannableStringBuilder(msg2);
        tvContent.setMovementMethod(LinkMovementMethod.getInstance());
        spannable1.setSpan(new ForegroundColorSpan(getResources().getColor(R.color.nvabar5)), 0, spannable1.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        spannable1.setSpan(new TextClick1(), 0, spannable1.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

其中new TextClick1()是该变色的文字添加点击方法,TextClick1()代码如下

    private class TextClick1 extends ClickableSpan {
        @Override
        public void onClick(View widget) {
            Intent intent = new Intent(AgreementDialogAcitivity.this, WebViewActivity.class);
            intent.putExtra(AppConst.IntentParameters.WEBVIEWURL, AppConst.SERVICEAGREEMENTURL);
            intent.putExtra(AppConst.IntentParameters.ISPLAINTEXT, true);
            intent.putExtra(AppConst.IntentParameters.TITLE, "用户协议");
            startActivity(intent);
        }

        @Override
        public void updateDrawState(TextPaint ds) {
            ds.setUnderlineText(false);
        }
    }

等最后需要显示的时候需要注意一个问题,用户协议和隐私政策前后可能还有很多文字,千万不要简单的拼接起来直接放在textview显示,这样是行不通的,文字变色和点击也没有效果,要用append方法一个一个的追加上去。

比如这样是不行的:

 StringBuilder stringBuffer = new StringBuilder();
        String msg = stringBuffer.append(msg1).append(spannable1).append(msg3).append(spannable2).append(msg5).toString();
        tvContent.setText(msg);

要这样才可以:

  tvContent.setText(msg1);
  tvContent.append(spannable1);
  tvContent.append(msg3);
  tvContent.append(spannable2);
  tvContent.append(msg5);

欢迎交流。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。