为什么膨胀的viewGroup不起作用?

时间:2013-02-14 06:05:38

标签: android xml view fonts layout-inflater

基本上,我正在尝试更改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);

1 个答案:

答案 0 :(得分: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" />