<string name="terms_and_privacy">By signing up you agree to our <a href="terms:">Terms of Service</a> and <a href="privacy:">Privacy Policy.</a></string>
<string name="agree_to_terms">I agree to the %1$s and %2$s</string>
<string name="terms_of_service">Terms of Service</string>
<string name="privacy_policy">Privacy Policy</string>
在onCreateView中调用以下方法
private void setTermsAndCondition() {
String termsOfServicee = getString(R.string.terms_of_service);
String privacyPolicy = getString(R.string.privacy_policy);
String completeString = getString(R.string.agree_to_terms, termsOfServicee,privacyPolicy);
int startIndex = completeString.indexOf(termsOfServicee);
int endIndex = startIndex + termsOfServicee.length();
int startIndex2 = completeString.indexOf(privacyPolicy);
int endIndex2 = startIndex2 + privacyPolicy.length();
SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(completeString);
ClickableSpan clickOnTerms = new ClickableSpan() {
@Override
public void onClick(View widget) {
Toast.makeText(this, "click on terms of service", Toast.LENGTH_SHORT).show();
}
@Override
public void updateDrawState(TextPaint ds) {
ds.setColor(ContextCompat.getColor(this, R.color.blue));
}
};
ClickableSpan clickOnPrivacy = new ClickableSpan() {
@Override
public void onClick(View widget) {
Toast.makeText(this, "click on privacy policy", Toast.LENGTH_SHORT).show();
}
@Override
public void updateDrawState(TextPaint ds) {
ds.setColor(ContextCompat.getColor(this, R.color.blue));
}
};
spannableStringBuilder.setSpan(clickOnTerms, startIndex, endIndex, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
spannableStringBuilder.setSpan(clickOnPrivacy, startIndex2, endIndex2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
yourTextView.setText(spannableStringBuilder);
yourTextView.setMovementMethod(LinkMovementMethod.getInstance());
}
<resources>
<string name="str_terms_and_privacy">By signing up you agree to our <a href="terms:">Terms of Service</a> and <a href="privacy:">Privacy Policy.</a></string>
</resources>
< string name="by_continuing_str2">< ! [ CDATA[By continuing to use this app, you agree to our <a href="https://go.test.com" style="color:gray"/> Privacy Statement </a> and <a href="https://go.test.com" style="color:gray"/>Services Agreement.]]>< / string>
private fun customTextView(view: TextView) {
//I agree to the Terms of service & Privacy Policy,
val spanTxt = SpannableStringBuilder(
"I agree to the ")
spanTxt.append("Terms of service")
spanTxt.setSpan(object : ClickableSpan() {
override fun onClick(widget: View) {
toast("Terms of service link clicked")
}
}, spanTxt.length - "Term of services".length, spanTxt.length, 0)
spanTxt.append(" and")
spanTxt.append(" Privacy Policy")
spanTxt.setSpan(object : ClickableSpan() {
override fun onClick(widget: View) {
toast("Privacy Policy link clicked")
}
}, spanTxt.length - " Privacy Policy".length, spanTxt.length, 0)
view.movementMethod = LinkMovementMethod.getInstance()
view.setText(spanTxt, TextView.BufferType.SPANNABLE)
}
8条答案
按热度按时间rks48beu1#
我想我分享这一点有点晚了,但是我已经使用SpannableStringBuilder实现了同样的效果。
只需初始化要添加2个或更多侦听器的
TextView
,然后将其传递给我创建的以下方法:在XML中,使用
android:textColorLink
添加您选择的自定义链接颜色,如下所示:看起来像这样:
r7knjye22#
您可以使用Linkify(* 安卓.文本.可扩展 *,*java.util.正则表达式.模式 *,*java.lang.字符串 *)
然后,您可以使用该方案启动活动,例如通过将该方案添加到 AndroidManifest:
如果您想执行自定义操作,可以将intent过滤器设置为当前Activity,它将具有singleTop启动模式。
这将导致onNewIntent被激发,其中可以使您的自定义操作:
bwntbbo33#
我的解决方案是:
1.这是我的XML布局中的TextView,不要添加任何链接处理参数。
1.在字符串文件中,我添加了带有html标记的资源文本
1.在onCreateView中,将链接移动方法设置为文本视图
现在,TextView链接是可单击的。
1.在清单文件中,我添加了针对"terms"和"privacy"的意图过滤器以及单示例启动模式
1.在MyActivity中,重写onNewIntent以捕获隐私和条款意图
thtygnil4#
最好的方法是使用字符串文件
在字符串. xml中
在onCreateView中调用以下方法
cx6n0qe35#
使用Textoo,可以像这样实现:
资源/值/字符串.xml:
资源/布局/我的活动.xml:
java/我的包/MyActivity.java:
这种方法具有以下优点:
LinksHandler
处理click事件,无需定义其他Intent过滤器fruv7luv6#
这对我很有效:
在xml中:
在字符串. xml中
在活动中:
vpfxa7rd7#
bzzcjhmw8#
一个简单的解决办法是使用多个标签,一个标签对应一个链接,另一个标签对应文本。
或者你有必要只用一个标签吗?