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);
但是现在我的应用程序在ListActivity
的onCreate
之后崩溃,但是在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,并且是这样的。
这里是一个教程,介绍如何创建自定义的数组适配器。
上一篇: custom font for textview in ArrayAdapter
下一篇: Take screenshots at fixed intervals with Python using threading.Timer