【问题标题】:Custom view for listView - fontlistView 的自定义视图 - 字体
【发布时间】:2012-10-03 20:30:16
【问题描述】:

我在为我的 ListView 设置自己的字体时遇到问题,我不知道如何使用自己的 Adapter 类以及我需要什么 xml(除了我放置 ListView 的那个)。我希望(在 ListView 中)仅用于具有自己字体的居中文本。 那是我的适配器:

public class MyAdapter extends BaseAdapter {

private String[]       objects; // no objects just String array
private final Context   context;

public MyAdapter(Context context, String[] objects) {
    this.context = context;
    this.objects = objects;
}

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

@Override
public Object getItem(int position) {
    return objects[position];
}

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

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

    Object obj = objects[position];

    TextView tv = new TextView(context);
    tv.setText(obj.toString());
    Typeface tf = Typeface.createFromAsset(getAssets(),"fonts/kolejRogFont.ttf");
    tv.setTypeface(tf);

    return tv;
}
}

它在 Lista.java 中调用

ListView lv = new ListView(this);
    lv.setAdapter(new MyAdapter(this, listview_array));

代码来自 StackOverFlow 上的另一个主题。

  1. 在线出错(未定义方法):

    字体 tf = Typeface.createFromAsset(getAssets(),"fonts/kolejRogFont.ttf");

2.屏幕上什么也没有出现。我应该为 ListView 布局制作 XML 吗?它应该包含什么?

【问题讨论】:

    标签: android android-layout fonts android-listview


    【解决方案1】:

    getAssets() 来自Context,所以它对你的适配器是未定义的。试试这个:

    Typeface tf = Typeface.createFromAsset(context.getAssets(),"fonts/kolejRogFont.ttf");
    

    编辑:作为旁注,我会将该行移至构造函数并将tf 设置为类变量。真的没有必要每次获得视图时都加载字体。

    【讨论】:

      【解决方案2】:

      将 MyAdapter 代码更改为:

      public class MyAdapter extends BaseAdapter {
      
      Typeface tf;
      private String[]       objects; // no objects just String array
      private final Context   context;
      
      public MyAdapter(Context context, String[] objects) {
          this.context = context;
          this.objects = objects;
          tf = Typeface.createFromAsset(context.getAssets(),"fonts/kolejRogFont.ttf");
      }
      ////Your code ...
      
      @Override
      public View getView(int position, View convertView, ViewGroup parent) {
      
          Object obj = objects[position];
      
          TextView tv = new TextView(context);
          tv.setText(obj.toString());
          tv.setTypeface(tf);
          return tv;
      }
      }
      

      【讨论】:

      • 谢谢!在 Lista.java "ListView lv = (ListView) findViewById(R.id.listaMenu);" 中更改后它也能正常工作只是子问题,如何添加边距?我已经制作了“tv.setTextSize(40); tv.setGravity(Gravity.CENTER_HORIZONTAL);”
      【解决方案3】:

      关于为列表视图设置边距的答案,您应该在 list_view_items.zml 中设置边距。例如在线性布局中设置边距或内边距。

      【讨论】:

      • 这应该是评论,而不是答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-13
      • 2011-06-02
      • 1970-01-01
      • 1970-01-01
      • 2013-02-23
      • 1970-01-01
      • 2016-08-22
      相关资源
      最近更新 更多