繁体   English   中英

ArrayAdapter中textview的自定义字体

[英]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);
 
 
  

但现在我的应用程序在 ListActivityonCreate之后崩溃了,但是在 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; } 

这很有效。 :)

您不应该调用适配器的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM