昆明市建设局官方网站,贵阳网站建设哪家,wordpress templates,网站新媒体建设开发中#xff0c;经常要用到一些阅读隐私协议的场景#xff0c;原生的textview控件很难做到在一个控件里有两个点击事件#xff0c;那现在就来安利一个强大的组件——SpannableStringBuilder。
先看看效果#xff1a; 直接上代码#xff0c;布局文件#xff1a; Li…开发中经常要用到一些阅读隐私协议的场景原生的textview控件很难做到在一个控件里有两个点击事件那现在就来安利一个强大的组件——SpannableStringBuilder。
先看看效果 直接上代码布局文件 LinearLayoutandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:paddingLeft40dpandroid:paddingRight40dpandroid:gravitycenter_verticalandroid:orientationhorizontalCheckBoxandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:gravitycenter_verticalandroid:text我已阅读并同意 /TextViewandroid:idid/login_ruleandroid:layout_widthwrap_contentandroid:text《用户协议》、android:layout_heightwrap_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() {Overridepublic void onClick(NonNull View view) {ToastUtils.show(隐私政策);}};ClickableSpan clickableSpan2 new ClickableSpan() {Overridepublic 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());
很关键否则无法响应点击事件