Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
170 views
in Technique[技术] by (71.8m points)

android change listview font and color

I've found loads of different ways of accomplishing this but I'm not sure what's the best for my scenario.

This is my Java code for the listview:

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

This is the xml code for the list:

<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>

For a text view I would add:

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

But this doesn't work for listviews. How do I change my font in this case?

Oke I'm almost there... I need to access my assets but I can't from within my custom adapter. I tried using final AssetManager assets = this.getAssets(); but that won't get me any further..

How to tackle this?

    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;
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

The list view itself isn't responsible for drawing the items, it uses an adapter to create the list items. This adapter creates a view to display the list item when required. To change the font used to display the list item, you have to change the adapter to return a view with the new font. This can be done in the Adapter.getView method. If you are currently using a standard Adapter implementation, you may need to subclass it (or completely replace it).


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...