ArrayAdapter中textview的自定义字体

Baz*_*zzz 7 android

我试图改变的字体TextView在我的ArrayAdapter.该字体chantelli_antiqua.ttf位于assets文件夹中.

这是我的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);
Run Code Online (Sandbox Code Playgroud)

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"
/>
Run Code Online (Sandbox Code Playgroud)

我很确定这个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);
    }
}
Run Code Online (Sandbox Code Playgroud)

并将我的java代码更改为:

listItemAdapter = new MenuItemAdapter(this, R.layout.listitem, menuItems);
Run Code Online (Sandbox Code Playgroud)

但现在我的应用程序崩溃后onCreateListActivity,但击中断点之前getView(...),我一直没能还没有找出原因.有什么建议吗?

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;
}
Run Code Online (Sandbox Code Playgroud)

这很有效.:)

Mic*_*ael 2

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