项目中会经常遇到关于使用同意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());