В общем, я пытаюсь изменить шрифт во всех представлениях макета 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);
Activity
как представление контента или как часть представления контента, или вы просто увеличиваете его? - person user   schedule 14.02.2013setContentView(R.layout.main)
, а неsetContentView(vg)
. Это увеличивает новыйViewGroup
вместо того, чтобы использовать тот, на который у вас есть ссылка. - person Adam S   schedule 14.02.2013