android ListView中的自定义字体

tis*_*was 9 fonts android listview typeface

我在我的应用程序中使用自定义字体(顺便说一下,我很惊讶地发现你必须手动以编程方式应用到每个控件!),我需要将它应用到列表视图中.问题是,我无法看到我将列表字体中使用的textview设置为自定义字体的位置(因为我从未实例化它 - 所有这些都由适配器处理).

我理想的是能够使用这样的适配器:

new ArrayAdapter(Context context, TextView textView, List<T> objects)
Run Code Online (Sandbox Code Playgroud)

这样我可以在填充列表之前执行:textView.setTypeface.有谁知道是否有办法沿着这些方向做某事?

Moi*_*edo 9

如果您不想创建新类,则可以在创建适配器时覆盖getView方法,这是带有标题和副标题的simpleAdapter的示例:

Typeface typeBold = Typeface.createFromAsset(getAssets(),"fonts/helveticabold.ttf");
Typeface typeNormal = Typeface.createFromAsset(getAssets(), "fonts/helvetica.ttf");

SimpleAdapter adapter = new SimpleAdapter(this, items,R.layout.yourLvLayout, new String[]{"title",
    "subtitle" }, new int[] { R.id.rowTitle,
    R.id.rowSubtitle }){
            @Override
        public View getView(int pos, View convertView, ViewGroup parent){
            View v = convertView;
            if(v== null){
                LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                v=vi.inflate(R.layout.yourLvLayout, null);
            }
            TextView tv = (TextView)v.findViewById(R.id.rowTitle);
            tv.setText(items.get(pos).get("title"));
            tv.setTypeface(typeBold);
            TextView tvs = (TextView)v.findViewById(R.id.rowSubtitle);
            tvs.setText(items.get(pos).get("subtitle"));
            tvs.setTypeface(typeNormal);
            return v;
        }


};
listView.setAdapter(adapter);
Run Code Online (Sandbox Code Playgroud)

其中items是您的地图ArrayList

希望有所帮助


mon*_*ack 8

您无法这样做,因为每次使用时,传递给ArrayAdapter的文本视图资源都会被充气.

您需要创建自己的适配器并提供自己的视图.

适配器的一个例子可能是

public class MyAdapter extends BaseAdapter {

private List<Object>        objects; // obviously don't use object, use whatever you really want
private final Context   context;

public CamAdapter(Context context, List<Object> objects) {
    this.context = context;
    this.objects = objects;
}

@Override
public int getCount() {
    return objects.size();
}

@Override
public Object getItem(int position) {
    return objects.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    Object obj = objects.get(position);

    TextView tv = new TextView(context);
    tv.setText(obj.toString()); // use whatever method you want for the label
    // set whatever typeface you want here as well
    return tv;
}
Run Code Online (Sandbox Code Playgroud)

}

然后你可以这样设置

ListView lv = new ListView(this);
lv.setAdapter(new MyAdapter(objs));
Run Code Online (Sandbox Code Playgroud)

希望这能让你前进.