设置TextView中超链接字体颜色、下划线


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

搞定,收队!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值