SpannableString字符串拼接

2019-11-07  本文已影响0人  草色陆连清

最近接到了一个新的需求。客户要在一段文字说明中,分别在两处地方显示不同颜色,并且会触发不同的点击事件。一开始使用Lilinelayout布局,横向排列几个Textview,但是这种方法不灵活,且在分辨率较低的手机上会造成换行时,没办法从第一个Textview底下开始换行。在网上找了一下资料,发现用SpannableString可以完美实现上述需求:


UI图.png

我们需要实现的是上述的《用户协议》与《法律声明》显示黄色且分别响应不同的点击事件。XML中只用到了一个简单的Textview控件,故省略XML代码

        String textstring1 = "已阅读并同意";
        String textstring2 = "《用户协议》";
        String textstring3 = "和";
        String textstring4 = "《法律声明》";
        SpannableString ss1 = new SpannableString(textstring2);
        ss1.setSpan(new ClickableSpan() {
            @Override
            public void onClick(View view) {
                  //《用户协议》点击事件
            }

            @Override
            public void updateDrawState(TextPaint ds) {
                ds.setUnderlineText(false);                                      //取消下划线
                ds.setColor(mContext.getResources().getColor(R.color.yellow));   //设置字体颜色
            }
        },0,textstring2.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

        SpannableString ss2 = new SpannableString(textstring4);
        ss2.setSpan(new ClickableSpan() {
            @Override
            public void onClick(View view) {
                  //《法律声明》点击事件
            }

            @Override
            public void updateDrawState(TextPaint ds) {
                ds.setUnderlineText(false);                                     //取消下划线
                ds.setColor(mContext.getResources().getColor(R.color.yellow));  //设置字体颜色

            }
        },0,textstring4.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

        //tvagree为Textview控件
        tvagree.setText(textstring1);
        tvagree.append(ss1);
        tvagree.append(textstring3);
        tvagree.append(ss2);
        tvagree.setMovementMethod(LinkMovementMethod.getInstance());
上一篇下一篇

猜你喜欢

热点阅读