在实际开发当中。我们经常会遇到像用户协议这种形式的textview。这种textview一般都是只有特殊的几个字有点击事件。别的都没有,那么怎么办呢。
后来我自己在网上找了很多发现了一种实现方式。我感觉挺不错的。就拿出来和大家分享一下
首先创建一个textview
protected TextView submit = (TextView)findViewById(R.id.textview);
其次,创建一个自己的clickableSpan类
public class My_ClickableSpan extends ClickableSpan {
private String content;
private Context context;
private View imageView;
public My_ClickableSpan(Context context, String content) {
this.context = context;
this.content = content;
}
public My_ClickableSpan(Context context, String content, View imageView) {
this.context = context;
this.content = content;
this.imageView = imageView;
}
@Override
public void updateDrawState(TextPaint ds) {
if (content.equals("登录代表同意"))
ds.setColor(context.getResources().getColor(R.color.loginTextHint));
else if (content.equals("《服务协议》"))
ds.setColor(context.getResources().getColor(R.color.loginBg));
}
@Override
public void onClick(View widget) {
if (content.equals("登录代表同意")) {
if (imageView.isSelected()) {
imageView.setSelected(false);
} else {
imageView.setSelected(true);
}
} else if (content.equals("《服务协议》")) {
ToastUtil.showMessage("查看");
}
}
}
最后在我们的activity中生命并使用我们自定义的这个ClickableSpan
String agreement1 = "登录代表同意 ";
String agreement2 = "《用户协议》";
String agreement3 = "《隐私政策》";
String agreement4 = ",并授权使用您的账号信息,以便您统一管理";
SpannableString spanAgreement1 = new SpannableString(agreement1);
SpannableString spanAgreement2 = new SpannableString(agreement2);
SpannableString spanAgreement3 = new SpannableString(agreement3);
SpannableString spanAgreement4 = new SpannableString(agreement4);
ClickableSpan my_clickableSpan1 = new My_ClickableSpan(this, agreement1);
ClickableSpan my_clickableSpan2 = new My_ClickableSpan(this, agreement2);
ClickableSpan my_clickableSpan3 = new My_ClickableSpan(this, agreement3);
ClickableSpan my_clickableSpan4 = new My_ClickableSpan(this, agreement4);
spanAgreement1.setSpan(my_clickableSpan1, 0, agreement1.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
spanAgreement2.setSpan(my_clickableSpan2, 0, agreement2.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
spanAgreement3.setSpan(my_clickableSpan3, 0, agreement3.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
spanAgreement4.setSpan(my_clickableSpan4, 0, agreement4.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
submit.append(spanAgreement1);
submit.append(spanAgreement2);
submit.append(spanAgreement3);
submit.append(spanAgreement4);
submit.setMovementMethod(LinkMovementMethod.getInstance());
submit.setHighlightColor(getResources().getColor(android.R.color.transparent));//不设置会有背景色
如此,此方式就设置好了
再次附赠一个知识单纯的设置多种字体的方式:在实际开发中。我们也会遇到单纯的只是在一个textview中设置两种字体。并不需要两种点击事件,在这种情况下。我们可以用HTML的方式去设置字体的多种颜色,简洁又快速。上面的方式呢。适用于一个textview中有多种字体和多种点击事件的情况。但是如果只是多种颜色没有多种点击事件则下面的方式也许更合适
Stringstr="默认颜色<font color='#FF0000'>红颜色</font>";tv.setTextSize(18);tv.setText(Html.fromHtml(str));