基本的に、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);