1

我尝试使用这种方法为文本视图设置字体:

public static final void setAppFont(ViewGroup mContainer, Typeface mFont)
{
    if (mContainer == null || mFont == null) return;

    final int mCount = mContainer.getChildCount();

    // Loop through all of the children.
    for (int i = 0; i < mCount; ++i)
    {
        final View mChild = mContainer.getChildAt(i);
        if (mChild instanceof TextView)
        {
            // Set the font if it is a TextView.
            ((TextView) mChild).setTypeface(mFont);
        }
        else if (mChild instanceof ViewGroup)
        {
            // Recursively attempt another ViewGroup.
            setAppFont((ViewGroup) mChild, mFont);
        }
    }
}
@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);

    // See assets/res/any/layout/styled_text.xml for this
    // view layout definition.
    setContentView(R.layout.read_asset);


    final Typeface mFont = Typeface.createFromAsset(getAssets(),
            "myfont.otf"); 
            final ViewGroup mContainer = (ViewGroup) findViewById(
            android.R.id.content).getRootView();
            MyActivity.setAppFont(mContainer, mFont);
}

但现在我想为这个 listview 适配器设置相同的字体:

public class MainActivity extends Activity {

// List view
private ListView lv;

// Listview Adapter

ArrayAdapter<String> adapter;


// Search EditText
EditText inputSearch;



// ArrayList for Listview

ArrayList<HashMap<String, String>> productList;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Listview Data


String products[] = {"item1", "item2","item3","item4","item5","item6" };



    lv = (ListView) findViewById(R.id.list_view);
    inputSearch = (EditText) findViewById(R.id.inputSearch);

    // Adding items to listview

    adapter = new ArrayAdapter<String>(this, R.layout.list_item, R.id.product_name, products);
    lv.setAdapter(adapter);

    /**
     * Enabling Search Filter
     * */
    inputSearch.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) {
            // When user changed the Text
            MainActivity.this.adapter.getFilter().filter(cs);
        }

        @Override
        public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                int arg3) {
            // TODO Auto-generated method stub

        }

        @Override
        public void afterTextChanged(Editable arg0) {
            // TODO Auto-generated method stub
        }
    });
}
}

有什么建议吗?先感谢您。

4

2 回答 2

6

只需覆盖getView适配器的方法:

    final Typeface mFont = Typeface.createFromAsset(getAssets(), "myfont.otf"); 
    adapter = new ArrayAdapter<String>(this, R.layout.list_item, R.id.product_name, products) {
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ViewGroup view = (ViewGroup) super.getView(position, convertView, parent);
            if(convertView == null) MyActivity.setAppFont(view, mFont);
            return view;
        }
    };
于 2012-11-22T15:52:15.917 回答
0

这是你需要的吗?我建议您使用自定义列表适配器,它可以帮助您根据需要添加或自定义列表视图。

例如在 getView() 方法中,您可以这样做

public View getView(int arg0, View arg1, ViewGroup arg2) {
View convertView = arg1;

            if(convertView == null)
            {
                 inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            }
            convertView = inflater.inflate(R.layout.inflating, arg2, false);
            TextView mTV_names = (TextView)convertView.findViewById(R.id.inflating_TV_names);

            // typeface used to display the text in different language other than english 
            // here it is tamil, hindi and telugu.

            Typeface face = Typeface.createFromAsset(getAssets(), "DroidSansRegionalAAD.ttf");

            //setting the typeface to the particular text 

            mTV_names.setTypeface(face);
            mTV_names.setText(""+countries[arg0]);
            return convertView;

        }
    } 

一旦看看检查这个

如果您需要使用您尝试使用的函数而不是编写所有内容,只需setAppFont(convertView, face)从 getView() 方法调用

于 2012-11-22T15:49:14.840 回答