android change listview font and color

31,196

Solution 1

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

}

Solution 2

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

Solution 3

you need to create a custom adapter.

check this answer

and then have a custom xml too.

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

then set the custom adapter to your listview.

listAdapter = new CustomListAdapter(YourActivity.this , R.layout.custom_list , mList);
mListView.setAdapter(listAdapter);

Solution 4

Simply, instead of using the inbuild xml file in the SKD

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

Make your own xml layout file like this-

`<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" />`

and use that in the adapter.

Sample Image:

Formatted List Item

Share:
31,196
Stein van Broekhoven
Author by

Stein van Broekhoven

Stein Broekhoven (1992), eats and drinks IT, favorite movie is "Back to the future" favorite person Steven Hawkin, he made ​​the following studies next school: MS Office, PHP, HTML, SQL, ObjectiveC, Python, free BSD Unix , Debian Linux Red Hat, Windows server 2003, Windows server 2008, OSX, Hardware, VM ware Adobe, he also host websites, a mail server, very precise and punctual and diligently helping the people of beautiful apps

Updated on July 09, 2022

Comments

  • Stein van Broekhoven
    Stein van Broekhoven almost 2 years

    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;