Listviews child Textviews字体错误

时间:2013-10-21 13:45:48

标签: java android listview android-listview

当我更改当前活动的所有文本视图的类型面时,所有更改除外 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);
                        }
                        } 

2 个答案:

答案 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);