android 同意协议、服务等,一行文字中掺杂关于其他颜色字体。同时实现超链接点击跳转等功能.

项目中会经常遇到关于使用同意XX协议,同意XX服务后继续下一步操作,具体的显示有可能为下图所展示

由于项目未上线一些关键协议进行屏蔽处理。


这个我在项目中用到了SpannableString类。废话不多说下面进行代码。


/**
 * 获取可点击的SpannableString
 *
 * @return
 */
private SpannableString getClickableSpan() {
    SpannableString spannableString = new SpannableString(productAmountRechargeMsg.getText().toString());
    spannableString.setSpan(new ClickableSpan() {
        @Override
        public void onClick(View widget) {
            Toast.makeText(ProductBuyNowActivity.this, "服务协议", Toast.LENGTH_SHORT).show();
        }
    }, 7, 19, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    spannableString.setSpan(new NoUnderlineSpan(), 7, 19, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

    spannableString.setSpan(new ClickableSpan() {
        @Override
        public void onClick(View widget) {
            Toast.makeText(ProductBuyNowActivity.this, "产品说明书", Toast.LENGTH_SHORT).show();
        }
    }, 19, 30, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    spannableString.setSpan(new NoUnderlineSpan(), 19, 30, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

    spannableString.setSpan(new ClickableSpan() {
        @Override
        public void onClick(View widget) {
            Toast.makeText(ProductBuyNowActivity.this, "风险揭示书", Toast.LENGTH_SHORT).show();
        }
    }, 30, 41, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    spannableString.setSpan(new NoUnderlineSpan(), 30, 41, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    return spannableString;
}

同时如果需要超链接没有下划线,则需要单独设置UnderlineSpan类,继承该类重写updateDrawState(TextPaint ds)方法;

/**
 * 无下划线的Span
 */
public class NoUnderlineSpan extends UnderlineSpan {

    @Override
    public void updateDrawState(TextPaint ds) {
        ds.setColor(getResources().getColor(R.color.color_009ae8));
        ds.setUnderlineText(false);
    }
}
设置ds.setUnderlineText(false);即可实现超链接没有下划线的效果.


在textView中直接设置setText();

即textView.setText(getClickableSpan());

注意,这里有个坑,需要留意。就是如果要设置超链接可以点击,需要格外设置点击

即 textView.setMovementMethod(LinkMovementMethod.getInstance());


  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值