android改变listview的字体和颜色

标签 android listview android-listview fonts

我发现了很多不同的方法来完成这个,但我不确定哪种方法最适合我的场景。

这是我的 ListView 的 Java 代码:

ListView lv;
lv = (ListView) findViewById(R.id.favList);

这是列表的 xml 代码:

<ListView
        android:id="@+id/favList"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="40dp"
        android:layout_marginLeft="30dp"
        android:layout_marginRight="30dp"
        android:layout_marginTop="20dp"
        android:background="@android:color/transparent"
        android:cacheColorHint="@android:color/transparent"
        android:listSelector="@android:color/transparent" >
    </ListView>

对于 TextView ,我会添加:

final Typeface fontList = Typeface.createFromAsset(assets, "optima-extra-black.ttf");
lv.setTypeface(fontList);

但这不适用于 ListView 。 在这种情况下如何更改字体?

好的,我快到了... 我需要访问我的 Assets ,但我不能从我的自定义适配器中访问。 我尝试使用 final AssetManager assets = this.getAssets(); 但这不会让我更进一步..

如何解决这个问题?

    class Myadapter extends BaseAdapter {

    LayoutInflater lif;
    ImageView sideArrow;
    TextView tv;


    public Myadapter(Context ctx) {
        lif = (LayoutInflater) ctx
                .getSystemService(LAYOUT_INFLATER_SERVICE);

    }

    @Override
    public int getCount() {

        return favarets.size();
    }

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

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

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

        View vi = convertView;
        if (convertView == null)
            vi = lif.inflate(R.layout.inflate, null);
        sideArrow = (ImageView) vi.findViewById(R.id.imageViewsidemark);

        tv = (TextView) vi.findViewById(R.id.textFav);
        tv.setText(favarets.get(position));
        final AssetManager assets = this.getAssets();
        final Typeface tvFont = Typeface.createFromAsset(assets, "OPTIMA.TTF");
        tv.setTypeface(tvFont);

        tv.setTextColor(Color.BLACK);

        return vi;

最佳答案

ListView 本身不负责绘制项目,它使用 adapter创建列表项。此适配器创建一个 View 以在需要时显示列表项。 要更改用于显示列表项的字体,您必须更改适配器以返回具有新字体的 View 。这可以在 Adapter.getView 中完成方法。 如果您当前使用的是标准适配器实现,则可能需要对其进行子类化(或完全替换)。

关于android改变listview的字体和颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18896887/

相关文章:

android - 调试 : file not found in Android 1. 0

android - 有什么方法可以在 Android Recycler View 中显示 Google Admob

Android:id ListView

android - 使用 SimpleCursorAdapter 和 ViewBinder 在 ListView 项中设置图像

java - 带有 ImageView 和按钮的 ListView 自定义适配器

android - 如何向 AChartEngine 折线图添加可点击项目?

java - android - 在包含特殊字符的特定字符串上使用 replaceAll 时出现 java.lang.ArrayIndexOutOfBoundsException

java语法问题

Android 自定义 Arrayadapter 不在 ListView 中显示数据

android - ListView 项目未显示在 fragment 中