VIVO手机上设置下划线不显示或者显示线段较细的问题

此文主要记录开发中遇到的VIVO手机上设置下划线不显示或者显示线段较细的问题:

因为涉及到多语言,所以在给textview设置下划线时不能直接采用new SpannableString("***")方式根据start和end位置去设置下划线或者点击事件,于是使用在strings.xml文件中去设置html方式实现。如下: 

<string name="scan4ginfotxt2"><Data><![CDATA[2.听到提示音\"收到配置信息\"后,设备开始入网。<a href="">没有听到任何提示音?</a>]]></Data></string>

此处对“没有听到任何提示音?”文字进行标红、设置下划线、设置可点击跳转,代码如下:

String tips = String.format(getResources().getString(R.string.scan4ginfotxt2));
mTip.setText(getClickableHtml(tips,0));
mTip.setMovementMethod(LinkMovementMethod.getInstance());
/**
 * 格式化超链接文本内容并设置点击处理
 * */
private CharSequence getClickableHtml(String html,int position) {
    Spanned spannedHtml;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        // flags
        // FROM_HTML_MODE_COMPACT:html块元素之间使用一个换行符分隔
        // FROM_HTML_MODE_LEGACY:html块元素之间使用两个换行符分隔
        spannedHtml = Html.fromHtml(html,Html.FROM_HTML_MODE_COMPACT);
    } else {
        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 , position);
    }
    return clickableHtmlBuilder;
}

/**
 * 设置点击超链接对应的处理内容
 * */
private void setLinkClickable(SpannableStringBuilder clickableHtmlBuilder,URLSpan urlSpan,int position) {
    int start = clickableHtmlBuilder.getSpanStart(urlSpan);
    int end = clickableHtmlBuilder.getSpanEnd(urlSpan);
    int flags = clickableHtmlBuilder.getSpanFlags(urlSpan);
    ClickableSpan clickableSpan = new ClickableSpan() {
        public void onClick(View view) {
            if(position == 0){
                //todo
            }else {
                //todo
            }
        }

        @Override
        public void updateDrawState(@NonNull TextPaint ds) {
            //自定义颜色和下划线
            ds.setColor(getResources().getColor(R.color.color_red));
            ds.setUnderlineText(true);
        }
    };
    clickableHtmlBuilder.clearSpans();
    clickableHtmlBuilder.setSpan(clickableSpan, start, end, flags);
}

这样实现后基本上手机都能达到想要的效果,但在实际过程中发现vivoY85A(Android8.1.0)手机出现下划线显示线段较细的问题,最终排查发现,在xml布局里面需要设置Textview的一个固定高度才行,如:

android:layout_height="wrap_content"
android:minHeight="30dp"

出现下划线不显示问题,发现是在xml里设置了

android:textSize="13sp"

此时需要在updateDrawState中重新设置TextPaint的尺寸:

//自定义颜色和下划线
ds.setColor(getResources().getColor(R.color.color_red));
ds.setUnderlineText(true);
ds.setTextSize(HiTools.sp2px(Config4GAPNActivity.this,13));
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值