我有一个列表适配器,即时通讯使用holder.text.setTypeface(TYPEFACE)
来设置类型面,我有一个名称字符串,我使用它分配每个ListView
按钮的文本。但我想知道如何只设置一个单独的列表项自定义字体。基本上我说我有3个ListAdapter按钮,按钮1,按钮2和按钮3.我希望按钮2是自定义字体,而按钮1和按钮3保持正常。怎么办呢?
答案 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代码混合在一起。 SimpleAdapter和SimpleCursorAdapter都有一个名为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字体。