当我更改当前活动的所有文本视图的类型面时,所有更改除外 Textview文本。
但是当我从listview的itemclick监听器调用相同的函数时,字体会改变
((TextView) view).setTypeface(CreateTypeface);
如何设置listview的字体而不必点击它?
final View rootView = findViewById(android.R.id.content);
public void applyCustomFont(ViewGroup list)
{
for (int i = 0; i < list.getChildCount(); i++) {
View view = list.getChildAt(i);
if (view instanceof ViewGroup)
{
applyCustomFont((ViewGroup) view);
} else if (view instanceof TextView)
{
((TextView) view).setTypeface(CreateTypeface);
}
}
}
lvfonts.setAdapter(new ArrayAdapter<String> (FontMUI.this,android.R.layout.simple_list_item_1, list));
lvfonts.setOnItemClickListener(new OnItemClickListener()
{
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3)
{
applyCustomFont((ViewGroup)rootView);
}
}
答案 0 :(得分:1)
您需要创建用于填充ListView的自定义适配器。在该自定义适配器中,您需要覆盖getView()
方法,以便在向用户显示之前对View进行任何更改。
这样的事情:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = mInflater.inflate(android.R.layout.simple_list_item_1, parent, false);
((TextView) convertView).setTypeface(CreateTypeface);
}
setupTextForPosition(convertView, position);
}
答案 1 :(得分:1)
使用此技巧设置列表视图的字体由于listview不是Textview的子类,因此无法直接访问listview的子项,您需要通过listview本身访问它们。
lvfonts.postDelayed(new Runnable() {
@Override
public void run() {
applyCustomFont((ViewGroup)rootView);
// or call you function to change the Typeface from here
}
}, 10);