使用具有不同文本样式的两种不同字体文本从边缘切割

时间:2015-12-10 08:28:08

标签: android textview android-typeface

[enter image description here

如果我使用单一类型的字体,其工作精细文本不会从边缘切割。但是当我尝试使用具有不同文本样式的两种不同字体时,则从Textview中的边缘切割文本。

Typeface tfNormal = Typeface.createFromAsset(ctx.getAssets(), "fonts/futura_tee.ttf");
Typeface tfBold = Typeface.createFromAsset(ctx.getAssets(), "fonts/futura_tee_bold.ttf");

String msg="tournament sopan 20 nov offline double 2 was updated";
SpannableStringBuilder sb = new SpannableStringBuilder();

        final String t_name = "sopan 20 nov offline double 2";
        int startindex = msg.indexOf(t_name);
        int endindex = startindex + t_name.length();

        ClickableSpan clickableSpan = new ClickableSpan() {
            @Override
            public void onClick(View textView) {
                //some click event
            }

            @Override
            public void updateDrawState(TextPaint ds) {
                ds.setUnderlineText(false);
                ds.setColor(ctx.getResources().getColor(R.color.blue_color));
                ds.setTypeface(tfBold);

            }
        };
        if (startindex >= 0) {
            sb.setSpan(clickableSpan, startindex , endindex , Spannable.SPAN_EXCLUSIVE_EXCLUSIVE );
        }


        textview.setMovementMethod(LinkMovementMethod.getInstance());
       textview.setText(sb, TextView.BufferType.SPANNABLE);
        textview.setTypeface(tfNormal);

2 个答案:

答案 0 :(得分:0)

我认为问题在于您的字体文件'futura_tee_bold.ttf',只需使用该地方的任何其他字体文件并检查它是如何工作的。如果要使用此字体,请尝试删除边距和填充到xml中该文本视图的所有父视图。

答案 1 :(得分:0)

此问题已经回答here

您不应在ClickableSpan中使用setTypeface。实际上,您应该对文本的相同部分使用两个不同的跨度:一个ClickableSpan和一个TypefaceSpan。

如果要为TypefaceSpan使用自定义字体,请参阅this post