您的位置:首页 > 移动开发 > Android开发

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

2017-08-11 14:22 956 查看
项目中会经常遇到关于使用同意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());
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐