Android动态添加下划线

时间:2016-01-21 10:34:18

标签: android

我想在我的应用程序中为TextView动态添加和删除unerline。

首先,我使用AQuery在片段的onCreateView中添加下划线:    aQuery.id(R.id.tv_help_consult).getTextView().setPaintFlags(aq.id(R.id.tv_help_consult).getTextView().getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);

它看起来很好。
enter image description here

但是当我删除下划线(并再次添加)时,字体会发生一些事情,因此您可以看到像素:

enter image description here

我在clickListenner中使用这些方法来更改下划线:

private void headingFontHighlightOn(TextView heading) {
        //        removing underline
        heading.setPaintFlags(0);
        //        changing color
        heading.setTextColor(ContextCompat.getColor(getActivity(), R.color.orange));
    }


private void headingFontHighlightOff(TextView heading) {
         //        making underline
         heading.setPaintFlags(heading.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
         //        changing color
         heading.setTextColor(ContextCompat.getColor(getActivity(), R.color.black));
        }

当然,我可以使用带有<u>标签的替代字符串资源,只需更改字符串资源即可 但我想确定这里发生的事情

编辑:以防有人需要,
我的最终解决方案是基于 Chintan Bawa 的回答 我只是修改了独立于String资源的方法(在不同的TextView上使用时):

private void headingFontHighlightOn(TextView heading) {
        //        removing underline
        heading.setText(heading.getText().toString());
        //        changing color
        heading.setTextColor(ContextCompat.getColor(getActivity(), R.color.orange));
    }

    private void headingFontHighlightOff(TextView heading) {
        //        making underline
        String underlinedText = "<u>" + heading.getText() + "</u>";
        heading.setText(Html.fromHtml(underlinedText));

        //        changing color
        heading.setTextColor(ContextCompat.getColor(getActivity(), R.color.black));
    }

我也删除了所有油漆标志。

1 个答案:

答案 0 :(得分:0)

如果你想要下划线应该是可点击的,你可以使用可点击的范围。如果不是忽略onclick操作。你可以使用下面的代码强调你喜欢的方式

String str =“你有”+ sessionUserId.getfudiyoPointsSession()                     +“fudiyo积分可用。什么是fudiyo积分?”;

        int index = str.indexOf(".");
        TextView txtfudiyo_point = (TextView) findViewById(R.id.user_fudiyo_point);

        SpannableString ss = new SpannableString(str);
        ClickableSpan clickableSpan = new ClickableSpan() {
            @Override
            public void onClick(View textView) {
                try {
                    showTermsConditions();
                } catch (Exception e) {
                    ErrorEmail.sendEmail(UserHomeScreen.this, e);
                }
            }

            @Override
            public void updateDrawState(TextPaint ds) {

                super.updateDrawState(ds);
                ds.setColor(Color.RED);
                ds.setUnderlineText(true);
            }
        };
        ss.setSpan(clickableSpan, index + 2, ss.length(),
                Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

        txtfudiyo_point.setText(ss);
        txtfudiyo_point.setMovementMethod(LinkMovementMethod.getInstance());