我正在尝试更改TextView
中ArrayAdapter
的字体。字体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
。但这并不是我想要的。
如何将TextView
中Adapter
的字体更改为自定义字体?
根据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
中遇到断点之前,我无法确定为什么呢。有什么建议吗?
击>
将getView(...)的代码更改为:
getView(...)
这是有效的。 :)
答案 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。