1

カスタムフォントを設定し、アプリケーション全体のhtmlテキストを設定するカスタムテキストビューを作成しました。私のアプリは多くの場所で両方の機能を備えているためです。この場合、カスタム フォントを Android アプリケーション全体に設定することができます。カスタムテキストビューにhtmlテキストを適用できませんでした。

私が持っている制限:

  1. テキストビューを取得して使用したくありませんsetText(Html.fromHtml("Some text"))。これをコードで使用すると機能しますが、テキストを次のように使用しstrings.xmlたい<string name="my_app"><![CDATA[My Whole <b>app</b>lication]]></string>
  2. 最終メソッドであるため、カスタム クラス関数で settext をオーバーライドできません。
  3. 私は 100 近くの html テキストを持っています。この文字列をコードにハードコーディングしたくありません。助けてください。

私のカスタムクラス:

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

太字のアプリ

これを達成する方法はありますか?

4

1 に答える 1

1

SpannbleString の使用を検討しましたか? TypefaceSpan または StyleSpan をカスタム Typeface で使用するにはどうすればよいですか?

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);
        }
    }
于 2013-06-26T14:25:32.673 に答える