java – Change font size in ListView – Android/Eclipse-ThrowExceptions

Exception or error:

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

}
How to solve:

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.

###

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

###

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

###

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.

###

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

###

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

Leave a Reply

Your email address will not be published. Required fields are marked *