ClickableSpan:这是超链接相关的样式控制和点击事件的控制类,我们需要对它进行继承,然后修改成我们需要的样式。其中,可以对超链接文本字符进行颜色、字体大小、字体、下划线、点击事件的自定义控制。
public class PhoneClickSpan extends ClickableSpan {
public interface OnLinkClickListener {
void onLinkClick(View view);
}
private OnLinkClickListener listener;
public PhoneClickSpan(OnLinkClickListener listener) {
super();
this.listener = listener;
}
@Override
public void onClick(View widget) {
listener.onLinkClick(widget);
}
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
ds.setColor(Color.argb(255, 255, 164, 102)); // 设置字体颜色
ds.setUnderlineText(false); //去掉下划线
}
}
以上是设置TextView中超链接字体颜色为金黄色,去掉下划线。
注意:在网上有说设置超链接颜色用的是这个方法:ds.setColor(0xFF0000);经测试这个方法设置会导致超链接文字不可见的问题。
在看下具体的超链接控制:
// 确定可点区域,并设置点击事件
private void setLinkClickable(final SpannableStringBuilder clickableHtmlBuilder,
final URLSpan urlSpan) {
int start = clickableHtmlBuilder.getSpanStart(urlSpan);
int end = clickableHtmlBuilder.getSpanEnd(urlSpan);
int flags = clickableHtmlBuilder.getSpanFlags(urlSpan);
PhoneClickSpan phoneClickSpan = new PhoneClickSpan(new PhoneClickSpan.OnLinkClickListener() {
@Override
public void onLinkClick(View view) {
// do something
doSomething();
}
});
clickableHtmlBuilder.setSpan(phoneClickSpan, start, end, flags);
}
// 为所有超链接设置样式
private CharSequence getClickableHtml(String html) {
Spanned spannedHtml = Html.fromHtml(html);
SpannableStringBuilder clickableHtmlBuilder = new SpannableStringBuilder(spannedHtml);
// 获取所有超链接
URLSpan[] urls = clickableHtmlBuilder.getSpans(0, spannedHtml.length(), URLSpan.class);
for(final URLSpan span : urls) {
setLinkClickable(clickableHtmlBuilder, span); // 为每个超链接样式设置
}
return clickableHtmlBuilder;
}</span>
然后在对xml布局进行设置:
<<TextView
style="@style/font_c_12pt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="@dimen/dp_width_30"
android:paddingRight="@dimen/dp_width_30"
android:paddingTop="@dimen/dp_height_20"
android:autoLink="all"
android:lineSpacingMultiplier="1.35"
android:text="修改新的密码需要通过手机号码安全验证,如果换了手机号码请前往"/></span>
此处重点是设置android:autoLink="all"最后,就是进行调用了。
也很简单:
TextView tvTip = (TextView) view.findViewById(R.id.user_forgetpassword);
tvTip.setText(getClickableHtml(tvTip.getText().toString()+ "<a href=\\\"http://www.baidu.com\">修改手机号码</a>"));
tvTip.setMovementMethod(LinkMovementMethod.getInstance()); //设置超链接为可点击状态
关键之处是:tvTip.setMovementMethod(LinkMovementMethod.getInstance()); 一定要进行调用!
注意:因为我只是想设置“修改手机号码”这几个字可点击而已,所以并不会跳转到百度首页,我只是要跳转到修改手机号码界面而已。
上效果图:
另附TextView字体样式相关设置链接:http://blog.csdn.net/jdsjlzx/article/details/19122103
搞定,收队!