textview的多种字体和一个textview中的多个点击事件

在实际开发当中。我们经常会遇到像用户协议这种形式的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));

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值