5

我找到了很多不同的方法来实现这一点,但我不确定哪种方法最适合我的方案。

这是我的列表视图的 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>

对于文本视图,我会添加:

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

但这不适用于列表视图。在这种情况下如何更改字体?

好的,我快到了……我需要访问我的资产,但我不能从我的自定义适配器中访问。我尝试使用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;
4

6 回答 6

6

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

于 2013-09-19T14:28:31.440 回答
6

我找到了解决方案:D

    public class Myadapter extends BaseAdapter {

    AssetManager assetManager = getAssets(); 

    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 Typeface tvFont = Typeface.createFromAsset(assetManager, "OPTIMA.TTF");
        tv.setTypeface(tvFont);
        tv.setTextColor(Color.BLACK);

        return vi;
    }

}
于 2013-09-21T13:39:43.033 回答
1

你需要创建一个custom adapter.

检查这个答案

然后有一个custom xml太。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content">
<TextView  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/textView"
    android:textSize="20px" android:paddingTop="10dip" android:paddingBottom="10dip"/>
</LinearLayout>

然后将自定义适配器设置为您的listview.

listAdapter = new CustomListAdapter(YourActivity.this , R.layout.custom_list , mList);
mListView.setAdapter(listAdapter);
于 2013-09-19T14:12:19.377 回答
1

简单地说,而不是使用 SKD 中的 inbuild xml 文件

`ArrayAdapter ad=new ArrayAdapter(GuestActivity.this,android.R.layout.simple_list_item_1,list);`

像这样制作自己的 xml 布局文件-

`<TextView xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@android:id/text1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textAppearance="@style/YourStyle"
        android:gravity="center_vertical"
        android:paddingStart="?android:attr/listPreferredItemPaddingStart"
        android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
        android:minHeight="?android:attr/listPreferredItemHeightSmall" />`

并在适配器中使用它。

示例图片:

格式化列表项

于 2019-03-20T07:43:17.700 回答
0

只需将其设置为您正在膨胀的 TextView,在适配器或 xml 布局中设置字体。

于 2013-09-19T14:15:26.050 回答
0

创建自定义文本视图布局
步骤 1:
创建新布局,例如 listview_custom
步骤 2:
清除 listview_custom 中的所有代码
步骤 3:
插入以下代码

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
<!-- change background color -->    
android:background="@color/white"
    android:id="@android:id/text1"
<--!change text color-->
    android:textColor="@color/black"
<--!insert font--> 
    android:fontFamily="@font/iransansweb"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceListItemSmall"
    android:gravity="center_vertical"
    android:paddingStart="?android:attr/listPreferredItemPaddingStart"
    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
    android:minHeight="?android:attr/listPreferredItemHeightSmall" />

并且设置 listview Adapter 非常简单

ArrayAdapter ad=new ArrayAdapter(MainActivity.this,R.layout.listview_custom,list);
listview.setAdapter(ad)
于 2021-04-01T08:41:44.063 回答