配置文件
<string name="agreement_read_agreed">已阅读并同意以下协议</string> <string name="mall_service_agreement">《易通商城服务协议》</string> <string name="privat_policy">《隐私权政策》</string> <string name="policy_text">%1$s %2$s %3$s</string>
java代码
String policy_text = getString(R.string.policy_text); String agreement_read_agreed = getString(R.string.agreement_read_agreed); String mall_service_agreement = getString(R.string.mall_service_agreement); String privat_policy = getString(R.string.privat_policy); Log.d("====2222====",policy_text.length()+""); String format_policy_text = String.format(policy_text, agreement_read_agreed, mall_service_agreement, privat_policy); SpannableString SpannableString = new SpannableString(format_policy_text); SpannableString.setSpan(new ForegroundColorSpan(Color.parseColor("#999999")), 0, agreement_read_agreed.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); SpannableString.setSpan(new ForegroundColorSpan(Color.parseColor("#333333")), 11, 11+mall_service_agreement.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); SpannableString.setSpan(new ForegroundColorSpan(Color.parseColor("#333333")), 12+mall_service_agreement.length(), format_policy_text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); SpannableString.setSpan(new NoLineClickSpan("1"), 11, 11+mall_service_agreement.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); policyText.setMovementMethod(LinkMovementMethod.getInstance()); SpannableString.setSpan(new NoLineClickSpan("2"), 12+mall_service_agreement.length(), format_policy_text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); policyText.setText(SpannableString); // policyText.setMovementMethod(LinkMovementMethod.getInstance()); policyText.setMovementMethod(ClickableMovementMethod.getInstance()); policyText.setClickable(false); policyText.setLongClickable(false); policyText.setOnClickListener(this);
效果图

点击事件的处理
private class NoLineClickSpan extends ClickableSpan { String text; public NoLineClickSpan(String text) { super(); this.text = text; } @Override public void updateDrawState(TextPaint ds) { // ds.setColor(ds.linkColor); ds.setColor(Color.parseColor("#333333")); ds.setUnderlineText(false); //去掉下划线 } @Override public void onClick(View widget) { if (text.equals("1")){ Log.d("====2222====","1"); }else if (text.equals("2")){ Log.d("====2222====","2"); } } }
整体的点击事件的处理
case R.id.policy_text: if (policyText.getSelectionStart() == -1 && policyText.getSelectionEnd() == -1) { //This condition will satisfy only when it is not an autolinked text //Fired only when you touch the part of the text that is not hyperlinked Log.d("====2222====","3"); } break ; stackoverflow详细的解决方法与解释https://stackoverflow.com/questions/16792963/android-clickablespan-intercepts-the-click-event