首页 文章

自定义Textview与Html文本和自定义字体整个Android应用程序

提问于
浏览
1

我创建了一个自定义textview来设置自定义字体并为整个应用程序设置html文本 . 因为我的应用程序在很多地方都有这两个功能 . 在这种情况下,我可以将自定义字体设置为整个Android应用程序,它工作得很好 . 但未能将html文本应用于自定义textview .

限制我有:

  • 我不想获取textview并使用 setText(Html.fromHtml("Some text")) . 它在我在代码中使用它时工作,但我想使用 strings.xml 中的文本作为 <string name="my_app"><![CDATA[My Whole <b>app</b>lication]]></string>

  • 我无法覆盖自定义类函数中的settext,因为它是最终方法 .

  • 我的html文本接近100.我不想在代码中对这些字符串进行硬编码 . 请帮忙 .

我的自定义类:

public class CustomTextView extends TextView {

    public CustomTextView(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
    }

    public CustomTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        // TODO Auto-generated constructor stub
    }

    public CustomTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        // TODO Auto-generated constructor stub 
    }

    @Override
    public void setTypeface(Typeface tf) {
        // TODO Auto-generated method stub
        super.setTypeface(Typeface.createFromAsset(getContext().getAssets(), "fonts/gothic.ttf"));
    }
}

我的布局文件:

<com.views.CustomTextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/my_app" />

我得到输出:我的应用程序

我希望输出为:My app lication

应用程序以粗体文本

有没有办法实现这个目标?

1 回答

  • 1

    你有没有考虑过使用SpannbleString? How can I use TypefaceSpan or StyleSpan with a custom Typeface?

    Here是您可以在SpannableString上应用的不同 Span .

    public void setSpan(){
        Spannable spantext = new SpannableString("My application");
    
    
        spantext.setSpan(new StyleSpan(Typeface.BOLD), 3//Start of span, 6//End of span, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        Typeface HelveticaNeueBoldItalic = Typeface.createFromAsset(getActivity().getAssets(), "fonts/HelveticaNeueBoldItalic.ttf");
        spantext.setSpan(new CustomTypefaceSpan("", HelveticaNeueBoldItalic ), 0, text.lenght(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    
    
    
        TextView text;
    
        text.setText(spantext);
    }
    
    
    
    
    
    
     public class CustomTypefaceSpan extends TypefaceSpan {
            private final Typeface newType;
    
            public CustomTypefaceSpan(String family, Typeface type) {
                super(family);
                newType = type;
            }
    
            @Override
            public void updateDrawState(TextPaint ds) {
                applyCustomTypeFace(ds, newType);
            }
    
            @Override
            public void updateMeasureState(TextPaint paint) {
                applyCustomTypeFace(paint, newType);
            }
    
            private static void applyCustomTypeFace(Paint paint, Typeface tf) {
                int oldStyle;
                Typeface old = paint.getTypeface();
                if (old == null) {
                    oldStyle = 0;
                } else {
                    oldStyle = old.getStyle();
                }
    
                int fake = oldStyle & ~tf.getStyle();
                if ((fake & Typeface.BOLD) != 0) {
                    paint.setFakeBoldText(true);
                }
    
                if ((fake & Typeface.ITALIC) != 0) {
                    paint.setTextSkewX(-0.25f);
                }
    
                paint.setTypeface(tf);
            }
        }
    

相关问题