Search code examples
androidlistviewandroid-listviewfonts

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;

Solution

  • I found out the solution :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;
        }
    
    }