开发中,经常要用到一些阅读隐私协议的场景,原生的textview控件很难做到在一个控件里有两个点击事件,那现在就来安利一个强大的组件——SpannableStringBuilder。
先看看效果:
直接上代码,布局文件:
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="40dp"
android:paddingRight="40dp"
android:gravity="center_vertical"
android:orientation="horizontal">
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:text="我已阅读并同意" />
<TextView
android:id="@+id/login_rule"
android:layout_width="wrap_content"
android:text="《用户协议》、"
android:layout_height="wrap_content"/>
</LinearLayout>
布局文件很容易理解,一个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);
注意文章来源:https://www.toymoban.com/news/detail-610253.html
mLoginRule.setMovementMethod(LinkMovementMethod.getInstance());
很关键,否则无法响应点击事件文章来源地址https://www.toymoban.com/news/detail-610253.html
到了这里,关于Android 实现阅读用户协议的文字控件效果的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!