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