0

基本的に、xml レイアウトのすべてのビューでフォントを変更しようとしています。これは、xml 以外の方法でのみ実行できます。何らかの理由で、setFont は、膨張したビュー グループの子では機能しません。私はviewGroupについて間違っていると思います...どうすればこれをより適切にインスタンス化できますか? ボタンのような通常のビューを使用するとコードは機能しますが、何百万ものボタンとテキストビューを定義したくないので、私の解決策は、レイアウトから作成されたビューグループを作成し、その中のすべてのビューを反復処理してフォントを変更することでした。助けてください!

public static void applyFonts(final View v, Typeface fontToSet) {
    try {

        if (v instanceof ViewGroup) {
            ViewGroup vg = (ViewGroup) v;

            for (int i = 0; i < vg.getChildCount(); i++) {
                View child = vg.getChildAt(i);
                applyFonts(child, fontToSet);
            }
        } else if (v instanceof TextView) {
            ((TextView) v).setTypeface(fontToSet);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    ViewGroup vg = (ViewGroup) inflater.inflate(R.layout.main, null);


    Typeface rockwellFont = Typeface.createFromAsset(getAssets(), "Rockwell.ttf");
     LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
     ViewGroup vg = (ViewGroup) inflater.inflate(R.layout.main, null);
     applyFonts(vg,rockwellFont);
     setContentView(vg);
4

1 に答える 1

1

このように、カスタムフォントが必要なビューを拡張することをお勧めします

package com.shahidawat.external;

    import com.shahidawat.R;
    import android.content.Context;
    import android.graphics.Typeface;
    import android.util.AttributeSet;
    import android.widget.TextView;

public class CustomTextView extends TextView {

        public CustomTextView(Context context) {
                super(context);
                init(context);

        }

        public CustomTextView(Context context, AttributeSet attrs, int defStyle) {
                super(context, attrs, defStyle);
                init(context);
        }

        public CustomTextView(Context context, AttributeSet attrs) {
                super(context, attrs);
                init(context);
        }

        private void init(Context context) {
                Typeface type = Typeface.createFromAsset(context.getAssets(),
                                "fonts/MonotypeCorsiva.ttf");

                setTypeface(type);
                setTextColor(context.getResources().getColor(R.color.black));
        }

}

次に、XMLで次のようにすることができます

<com.shahidawat.external.CustomTextView
        android:id="@+id/txtHeader"
        android:layout_width="match_parent"
        android:layout_height="30dp"
        android:layout_marginBottom="5dp"
        android:background="@drawable/separater"
        android:gravity="bottom|center_horizontal"
        android:text="Header"
        android:textSize="20sp"
        android:textStyle="bold" />
于 2013-02-14T07:12:42.687 に答える