[英]custom font for textview in ArrayAdapter
我正在尝试更改ArrayAdapter
TextView
的字体。 字体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);
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
。
但这并不是我想要的。
如何将
Adapter
中的
TextView
的字体更改为自定义字体?
根据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);
但现在我的应用程序在
ListActivity
的
onCreate
之后崩溃了,但是在
getView(...)
遇到断点之前,我还没弄清楚原因。
有什么建议吗?
将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,它就是这样的。
这是一个描述如何创建自定义arrayAdapter的教程 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.