Android 实现阅读用户协议的文字控件效果

开发中,经常要用到一些阅读隐私协议的场景,原生的textview控件很难做到在一个控件里有两个点击事件,那现在就来安利一个强大的组件——SpannableStringBuilder。

先看看效果:

Android 实现阅读用户协议的文字控件效果_第1张图片

 直接上代码,布局文件:

    

        

        

    

布局文件很容易理解,一个checkbox实现选中效果,旁边加一个textview。

在activity中;

private TextView mLoginRule;

通过findviewbyid获取控件id后

    private void setRule() {
        SpannableStringBuilder span = new SpannableStringBuilder();
        span.append("隐私协议").append("、").append("用户协议");

        ClickableSpan clickableSpan = new ClickableSpan() {
            @Override

            public void onClick(@NonNull View view) {
                ToastUtils.show("隐私政策");
            }

        };

        ClickableSpan clickableSpan2 = new ClickableSpan() {
            @Override

            public void onClick(@NonNull View view) {
                ToastUtils.show("用户协议");
            }

        };

        span.setSpan(clickableSpan,0,4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        span.setSpan(clickableSpan2,5,9, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);


        mLoginRule.setText(span);
        mLoginRule.setMovementMethod(LinkMovementMethod.getInstance());

    }

代码很容易理解,重点讲讲setSpan,这里第一个参数定义了响应点击事件的方法,第二个就是文字的开头角标,第三个是文字结尾角标,第四个表示不包含start和end所在的端点  (star,end)

setSpan(clickableSpan,0,4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

注意

 mLoginRule.setMovementMethod(LinkMovementMethod.getInstance());

很关键,否则无法响应点击事件

你可能感兴趣的:(android)