9aafd80df162bef65c687287229e6f2d.png

一、效果展示

我们先来看下效果:

9aafd80df162bef65c687287229e6f2d.png

二、代码实现

注释写的已经很详细了,其中tvLoginPrivacyPolicy是我需要设置对应地方有点击效果的TextView,具体代码实现如下所示:

private void setTvLoginPrivacyPolicySpecialText() {

// 不需要点击的文字

tvLoginPrivacyPolicy.setText(R.string.Bylogging);

// 设置需要点击的文字

SpannableString clickString1 = new SpannableString(getString(R.string.PrivacyPolicy));

// 设置需要点击文字的样式

clickString1.setSpan(new ClickableSpan() {

@Override

public void onClick(View widget) {

// 点击之后需要做的操作

forwardPrivacyPolicy();

}

@Override

public void updateDrawState(TextPaint ds) {

super.updateDrawState(ds);

// 设置可点击文字的颜色

ds.setColor(getResources().getColor(R.color.clickText));

}

// 0-->clickString1.length()这个长度就是需要点击的文字长度

}, 0, clickString1.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

// 将需要点击的文字添加到我们的TextView中

tvLoginPrivacyPolicy.append(clickString1);

// 继续添加不需要点击的文字组装TextView

tvLoginPrivacyPolicy.append(new SpannableString(" " + getString(R.string.And)) + " ");

// 添加需要点击的文字

SpannableString clickString2 = new SpannableString(getString(R.string.TermsAndConditions));

// 设置需要点击文字的样式

clickString2.setSpan(new ClickableSpan() {

@Override

public void onClick(View widget) {

forwardPrivacyPolicy();

}

@Override

public void updateDrawState(TextPaint ds) {

super.updateDrawState(ds);

//设置颜色

ds.setColor(getResources().getColor(R.color.clickText));

}

// 0-->clickString2.length()这个长度就是需要点击的文字长度

}, 0, clickString2.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

tvLoginPrivacyPolicy.append(clickString2);

// 设置点击文字点击效果为透明

tvLoginPrivacyPolicy.setHighlightColor(Color.TRANSPARENT);

// 开始响应点击事件

tvLoginPrivacyPolicy.setMovementMethod(LinkMovementMethod.getInstance());

}

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐