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 回答