ArrayAdapter中textview的自定义字体

时间:2011-05-06 12:10:02

标签: android

我正在尝试更改TextViewArrayAdapter的字体。字体chantelli_antiqua.ttf位于资源文件夹中。

<击> 这是我的Java代码:

listItemAdapter = new ArrayAdapter<MenuItem>(this, R.layout.listitem, menuItems);

Typeface font = Typeface.createFromAsset(getAssets(), "chantelli_antiqua.ttf");  
TextView v = (TextView)listItemAdapter.getView(0, null, null);
v.setTypeface(font);

listitem布局的xml:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:padding="10dp"
    android:textSize="30sp"
/>

我很确定问题出在Adapter.getView(int, View, ViewGroup)方法上。我只是不明白要传递什么作为变量并尝试null。但这并不是我想要的。

如何将TextViewAdapter的字体更改为自定义字体?

更新

根据Pixie的建议,我创建了MenuItemAdapter,扩展了ArrayAdapter<MenuItem>

public class MenuItemAdapter extends ArrayAdapter<MenuItem>
{
    private Typeface font;

    public MenuItemAdapter(Context context, int textViewResourceId, List<MenuItem> objects) 
    {
        super(context, textViewResourceId, objects);

        font = Typeface.createFromAsset(context.getAssets(), "chantelli_antiqua.ttf"); 
    }

    @Override  
    public View getView(int position, View view, ViewGroup viewGroup)
    {
        ((TextView)view).setTypeface(font);
        return super.getView(position, view, viewGroup);
    }
}

并将我的java代码更改为:

listItemAdapter = new MenuItemAdapter(this, R.layout.listitem, menuItems);

但现在我的应用程序在onCreate的{​​{1}}之后崩溃,但在ListActivity中遇到断点之前,我无法确定为什么呢。有什么建议吗?

UPDATE2

将getView(...)的代码更改为:

getView(...)

这是有效的。 :)

2 个答案:

答案 0 :(得分:2)

您不应该调用适配器的getView()方法。 ListView为您完成此操作。您必须扩展ArrayAdapter类并改写getView()方法。在此方法中,您必须为新视图充气或重新使用convertView并为此视图设置字体。

答案 1 :(得分:2)

我认为问题出在getView()方法结束时的return super.getView(position, view, viewGroup);。 我认为应该是这样的

 @Override  
public View getView(int position, View view, ViewGroup viewGroup)
{
    TextView tv = ((TextView)view).setTypeface(font);
    tv.setText(<String> getItem());
    return tv;
}

请注意这段代码是示例我现在没有尝试过,但我之前制作了自定义arrayAdapter,它就是这样的。
这是一个描述如何创建自定义arrayAdapter的tutorial