尝试为每个单独的ListAdapter按钮设置自定义字体

时间:2011-01-01 04:24:35

标签: java android listview listadapter

我有一个列表适配器,即时通讯使用holder.text.setTypeface(TYPEFACE)来设置类型面,我有一个名称字符串,我使用它分配每个ListView按钮的文本。但我想知道如何只设置一个单独的列表项自定义字体。基本上我说我有3个ListAdapter按钮,按钮1,按钮2和按钮3.我希望按钮2是自定义字体,而按钮1和按钮3保持正常。怎么办呢?

2 个答案:

答案 0 :(得分:9)

创建扩展ArrayAdapter的类并在getView过程中设置字体。

答案 1 :(得分:1)

有两种方法可以做到这一点,我最喜欢的两种方法是在XML布局中设置它。如果在每个“Button2”上需要相同的自定义字体,并且所需的Typeface已经是系统的一部分,这将有效。

<TextView 
android:id="@+id/button2"
android:layout_height="wrap_content" 
android:layout_width="wrap_content"
android:typeface="sans" />

第二种方法是使用ViewBinder自定义ListAdapter。正如Pinassi写的那样,可以从getView()开始,但是这样做的缺点是无法轻松查看数据并将通用UI代码与自定义UI代码混合在一起。 SimpleAdapterSimpleCursorAdapter都有一个名为ViewBinder的内部类,其方法为setViewValue。每个签名因其管理的基础数据而不同。

只需覆盖setViewValue,仅用于您要手动控制的自定义。例如,R.id.button1是一个简单的文本绑定,只是让方法返回false,API将为您处理它,但由于我们正在自定义R.id.button2,我们将返回true。

switch(v.getId){
case R.id.button2:
   TextView button2 = (TextView) v;
   button2.setTypeface(customTypeFace);
   // bind text here or return false to allow the API to do this for you.
break;
// other customization
}

customTypeFace来自系统Typeface或项目的assets folder。 Android使用TrueType字体。