21

How can I change the font size in a ListView element? In my main.xml file, I have tried several different values in for android:textSize (pt,px,sp,dp) and nothing seems to change it.

Here is what I have currently for the in my main.xml:

<ListView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/list"
    android:textColor="#ffffff"
    android:background="#000080" 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" 
    android:clickable="true" 
    android:dividerHeight="1px"
    android:layout_marginTop="5px" 
    android:textSize="8px"/>

Here is my Java:

package com.SorenWinslow.TriumphHistory;

import android.app.ListActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;

public class TriumphHistory extends ListActivity {
    String[] HistoryList;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        ArrayAdapter<String> adapter;
        HistoryList = getResources().getStringArray(R.array.history);
        adapter = new ArrayAdapter<String> (this,android.R.layout.simple_list_item_1,HistoryList);
        setListAdapter(adapter);
    }

}
Soren
  • 1,737
  • 5
  • 15
  • 11

6 Answers6

58

Go into layout create a new xml file named mylist.xml

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
 android:id="@android:id/text1"  
        android:paddingTop="2dip" 
        android:paddingBottom="3dip" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" /> 

now in the code

        adapter = new ArrayAdapter<String> (this,android.R.layout.simple_list_item_1,HistoryList);

change it to

        adapter = new ArrayAdapter<String> (this,R.layout.mylist,HistoryList);
Shereef Marzouk
  • 3,282
  • 7
  • 41
  • 64
28

2 ways to go:

  1. Copy simple_list_item_1.xml from Android sources, modify it and then use it instead of android.R.layout.simple_list_item_1;
  2. Use BaseAdapter and modify font size in getView(..) call.

I'd suggest you go with latter.

yanchenko
  • 56,576
  • 33
  • 147
  • 165
  • How do i define where to change the size in get view? – Shouvik Jul 27 '10 at 06:08
  • As Alex has suggested, it makes sense to override the Adapter's getView() method. I use this approach and it works well. – tamsler Dec 25 '11 at 21:59
  • I used option 1 since all I don't need to do much, over riding getView method sounds like an overkill IMO – Naeem A. Malik Oct 30 '13 at 11:41
  • 2
    This is an incomplete answer at best. There is no mention of the method to call (setTextSize); the View object in the adapter is a ListView object, not the TextView associated with it; therefore 'setTextSize' is not a method against that view; if you figure that out and call 'findViewById' against the view you have to get the associated TextView, it shows an error when you try to use "android.R.layout.simple_list_item_1' as the id; etc. etc. Not sure why this answer was selected or upvoted as it would require a dozen follow-on questions to actually get something to work. – JackLThornton May 01 '17 at 23:00
6

Please create another file named list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" 
    android:padding="6dp"
    android:textSize="21sp">

Zou
  • 313
  • 3
  • 6
0

The quick answer is that you can only change the text size by using your own layout rather than the android.R.layout.simple_list_item one. By doing that you can change the TextView properties such as the text size. However if you haven't worked with lists with your own layouts, they can appear a bit complex to use the first time. I'll try to come back and edit this answer to provide more information later, but I suggest you look for tutorials on custom list views - that will show you how to inflate your own layout files.

Steve Haley
  • 55,374
  • 17
  • 77
  • 85
0

Create another xml file for the Text that should be in the list rows..

and just add android:layout_height="?android:attr/listPreferredItemHeight" in your TextView :D (put it in a relative layout rather than a linear layout)

and then use your previous ListView xml for the setContentView(R.layout.listview)

and the other xml file in your ArrayAdapter code

ArrayAdapter adapter = new ArrayAdapter(this, R.layout.yoursecondLayoutforthelistswithText, R.id.titles, HistoryList)

the R.id.titles is the id for the TextView

Vasile Surdu
  • 1,203
  • 1
  • 10
  • 11
-1

you can save font size in sharedprefs and then recreate your adapter

    SharedPreferences.Editor ed = mSharedPreferences.edit();
    ed.putFloat("fontTwosize", sizeTwo);
    ed.commit();

    adapterz = new LazyziyaratAdapter(MainActivity.this,
                    ziyaratList);

    listz.setAdapter(adapterz);

and in your getview method of adapter

 holder.text.setTextSize(TypedValue.COMPLEX_UNIT_SP,G.mSharedPreferences.getFloat("fontTwosize", 25));
Mohammad Zaer
  • 638
  • 7
  • 9