可以使用SpannableString和ClickableSpan:
TextView userAgreement = findViewById(R.id.user_agreement);
SpannableString agreement = new SpannableString("Agree to the User Agreement and Privacy Policy");
agreement.setSpan(new MyClickableSpan("User Agreement"), 13, 27, SpannableString.SPAN_INCLUSIVE_INCLUSIVE);
agreement.setSpan(new MyClickableSpan("Privacy Policy"), 32, 46, SpannableString.SPAN_INCLUSIVE_INCLUSIVE);
userAgreement.setText(agreement);
userAgreement.setMovementMethod(LinkMovementMethod.getInstance());
上面代碼中setMovementMethod這一句是固定的,必須添加,否則點擊沒效果。這裏setSpan方法有四個參數:
//what:要加何種樣式或功能
//start:開始加樣式的位置
//end:結束加樣式的位置
//flags:是否包含開始和結束位置的字符
public void setSpan (Object what, int start, int end, int flags)
其中start參數和end參數的確定有個小技巧,就是Android Studio當你在源代碼窗格選擇了一段文字,底部狀態欄會自動出現字符個數,這樣省着一個一個數字符的麻煩。
MyClickableSpan代碼如下:
static class MyClickableSpan extends ClickableSpan {
private String text;
public MyClickableSpan(String text) {
this.text = text;
}
@Override
public void onClick(@NonNull View view) {
Toast.makeText(view.getContext(), text, Toast.LENGTH_SHORT).show();
}
@Override
public void updateDrawState(@NonNull TextPaint ds) {
super.updateDrawState(ds);
ds.setColor(Color.parseColor("#ff3783"));
ds.setUnderlineText(false);
}
}