ArrayAdapter中textview的自定义字体

我试图改变我的ArrayAdapter中的TextView的字体。 字体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);

xml的listitem布局:

<?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 。 但这并不符合我的愿望。

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

更新

根据精灵的建议我创建了一个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);

但是现在我的应用程序在ListActivityonCreate之后崩溃,但是在getView(...) ListActivity断点之前,我还没有弄清楚为什么。 任何建议?

UPDATE2

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

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

这工作。 :)


您不应该调用适配器的getView()方法。 ListView为你做这个。 您必须扩展ArrayAdapter类并重写getView()方法。 在这种方法中,你必须膨胀一个新的视图或者重新使用convertView并为这个视图设置字体。


我认为这个问题是return super.getView(position, view, viewGroup); 在getView()方法的末尾。 我认为它应该是这样的

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

请注意这段代码是我没有现在尝试它的例子,但是我之前创建了自定义的arrayAdapter,并且是这样的。
这里是一个教程,介绍如何创建自定义的数组适配器。

链接地址: http://www.djcxy.com/p/52583.html

上一篇: custom font for textview in ArrayAdapter

下一篇: Take screenshots at fixed intervals with Python using threading.Timer