自定义的TextView与HTML文本和自定义字体整个Android应用 [英] Custom Textview with Html text and Custom Font whole Android application

查看:528
本文介绍了自定义的TextView与HTML文本和自定义字体整个Android应用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我创建了一个自定义的TextView设置自定义字体,并设置为整个应用程序的HTML文本。因为我的应用程序既有很多地方的功能。在这种情况下,我可以能够设置自定义字体到整个android应用它的伟大工程。但未能申请HTML文本自定义TextView的。

I have created a custom textview to set the custom font and to set the html text for whole application. Because my app has both the functions in many places. In this case, i can able to set the custom font to whole android application it works great. but failed to apply html text for custom textview.

限制我有:


  1. 我不想让TextView的,并使用的setText(Html.fromHtml(一些文本))。这是工作,当我在code。使用这个,但我想使用的strings.xml 文本为<字符串名称=my_app应用><![CDATA [我的整个< b>应用< / b> lication]>< /串>

  2. 我不能,因为它是最后一个方法覆盖自定义类的功能的setText。

  3. 我的HTML文本的近100家。我不想硬code在code此字符串。请帮助。

  1. I do not want to get the textview and use setText(Html.fromHtml("Some text")). It is working when i using this in code but i want to use the text in strings.xml as <string name="my_app"><![CDATA[My Whole <b>app</b>lication]]></string>
  2. I cannot override settext in custom class function since it is final method.
  3. I have the html text nearly 100. I do not want to hard code this strings in code. Please help.

我的自定义类:

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" />

我得到的输出为:我的应用

I get the output as : My application

我想要的输出为:我的应用 lication

I want the output as: My application

应用程序以粗体

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

Is there a way to achieve this?

推荐答案

你有consideret使用SpannbleString?
<一href=\"http://stackoverflow.com/questions/4819049/how-can-i-use-typefacespan-or-stylespan-with-custom-typeface\">How我可以使用TypefaceSpan或StyleSpan定制的字样?

Have you consideret to use SpannbleString? How can i use TypefaceSpan or StyleSpan with custom Typeface?

这里是,你可以将不同的跨度在SpannableString。

Here is different spans that you can apply on SpannableString.

 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);
        }
    }

这篇关于自定义的TextView与HTML文本和自定义字体整个Android应用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆