How to programmatically set the size of the font in the list item before adding it to the ListView?

StackOverflow https://stackoverflow.com/questions/12734322

Question

I'm interested in how you can change the size of the text in the list and then add it to the ListView. I'm using a list_item with custom layout . The question is how you can set the size of the text before it gets into the ListView. I hope for your help.

list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    xmlns:android1="http://schemas.android.com/apk/res/android">

<LinearLayout
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    >

    <TextView
        android:id="@+id/shop_name"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="1"
        />

    <TextView
        android:id="@+id/shop_address"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="2"
        />

</LinearLayout>

</LinearLayout>

day_list_events.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:layout_gravity="center"
    android:id="@+id/layout"
    >

<TextView 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:id="@+id/day_and_data"
    android:text="Перелік клієнтів на сьогоднішній день."
    android:textStyle="bold"
    />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:id="@+id/help_info"
    android:text="(Щоб отримати інформацію про клієнта та оформити замовлення - натисніть на відповідного клієнта у списку)"
    android:textColor="#A0A0A0"
    />

<ListView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:id="@+id/day_list_event"
    >

</ListView>

</LinearLayout>

DayListEventsActivity.java

import java.util.ArrayList;
import java.util.HashMap;

import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.Resources;
import android.os.Bundle;
import android.view.Window;
import android.widget.ListView;
import android.widget.SimpleAdapter;

public class DayListEventsActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
    this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.day_list_events);
    sharedPreferences = getSharedPreferences("impInfo", Context.MODE_PRIVATE);
    Resources res = this.getResources();
    ArrayList<HashMap<String, String>> dayShopsInfo = new ArrayList<HashMap<String, String>>();
    String[] shopName = res.getStringArray(R.array.shop_name);
    String[] shopAddress = res.getStringArray(R.array.shop_address);        
    for(int i = 0; i < shopName.length; i++){
        HashMap<String, String> dayShopsInfoCont = new HashMap<String, String>();
        dayShopsInfoCont.put(KEY_SHOP_NAME, shopName[i]);
        dayShopsInfoCont.put(KEY_SHOP_ADDRESS, shopAddress[i]);
        System.out.println(i+" "+shopName[i]+" "+shopAddress[i]);
        dayShopsInfo.add(dayShopsInfoCont);         
    }
    ListView shopList = (ListView)findViewById(R.id.day_list_event);
    SimpleAdapter shopListAdapter = new SimpleAdapter(this,
            dayShopsInfo,
            R.layout.list_item,
            new String[]{KEY_SHOP_NAME, KEY_SHOP_ADDRESS},
            new int[]{R.id.shop_name, R.id.shop_address});
    shopList.setAdapter(shopListAdapter);
    shopList.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
}

private final String KEY_SHOP_NAME = "shop name";
private final String KEY_SHOP_ADDRESS = "shop address";
private SharedPreferences sharedPreferences;
}

UPDATE (Solution).

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.Resources;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;

public class DayListEventsActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
    this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.day_list_events);
    sharedPreferences = getSharedPreferences("impInfo", Context.MODE_PRIVATE);
    Resources res = this.getResources();
    ArrayList<HashMap<String, String>> dayShopsInfo = new ArrayList<HashMap<String, String>>();
    String[] shopName = res.getStringArray(R.array.shop_name);
    String[] shopAddress = res.getStringArray(R.array.shop_address);        
    for(int i = 0; i < shopName.length; i++){
        HashMap<String, String> dayShopsInfoCont = new HashMap<String, String>();
        dayShopsInfoCont.put(KEY_SHOP_NAME, shopName[i]);
        dayShopsInfoCont.put(KEY_SHOP_ADDRESS, shopAddress[i]);
        System.out.println(i+" "+shopName[i]+" "+shopAddress[i]);
        dayShopsInfo.add(dayShopsInfoCont);         
    }
    ListView shopList = (ListView)findViewById(R.id.day_list_event);
    MySimpleAdapter shopListAdapter = new MySimpleAdapter(this,
            dayShopsInfo,
            R.layout.list_item,
            new String[]{KEY_SHOP_NAME, KEY_SHOP_ADDRESS},
            new int[]{R.id.shop_name, R.id.shop_address});
    shopList.setAdapter(shopListAdapter);
    shopList.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
}

public class MySimpleAdapter extends SimpleAdapter{

    public MySimpleAdapter(Context context,
                            List<? extends Map<String, ?>> data,
                            int resource,
                            String[] from, int[] to) {
        super(context, data, resource, from, to);           
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent){
        View returnView = super.getView(position, convertView, parent);
        TextView shopName = (TextView)returnView.findViewById(R.id.shop_name);
        shopName.setTextSize(20.0f);
        return returnView;
    }

}

private final String KEY_SHOP_NAME = "shop name";
private final String KEY_SHOP_ADDRESS = "shop address";
private SharedPreferences sharedPreferences;
}
Was it helpful?

Solution

Simply do this in the getView() method of the Adapter, to set the font size.

tv.setTextSize(20.0f);

OTHER TIPS

If you are using xml for setting layout for list_item and there you have TextView you can change the size of the text like this:

<TextView  
    android:id="@+id/text_id"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:textSize="20sp" /> // This is a size of your text

There's not "size of text" You can change the size of the text inside the TextView: Add:

 android:textSize="16sp" 

TO your XML Or you can do it by code in the getView() method in the Adapter:

YOUR_TEXTVIEW.setTextSize(16);

I know this might be a little late, however I noticed that everyone forgot something in their answers. the method setTextSize takes 2 parameters for it's input. The second if a float that is the number of the size you want. The first is a TypedValue Constant to let specify what the number means ie: pixels, dip, sp, etc... so for the setTextSize set to 18sp it would look something like this:

TextView yourTextView = (TextView)findViewById(R.id.yourTextViewId);
yourTextView.setTextSize(TypedValue.COMPLEX_UNIT_SP,18)

and you would do it in the getView of the ArrayAdapter. Hope this helps someone else who was looking for an answer and stumble upon this one.

Try this one

TextView textView = (TextView) findViewById (R.id.yourTextViewId);
textView.setTextSize(18);
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top