0

So this listView of mine is giving me headaches. It is working perfectly and all, but I can't seem to change the font of the text in the lV.

This is my code:

public class MyActivity3 extends Activity {
private TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_my3);
    Button m = (Button) findViewById(R.id.button3);
    tv = (TextView) findViewById(R.id.textViewcat);
    Typeface typeface = Typeface.createFromAsset(getAssets(), "BebasNeue Bold.ttf");
    tv.setTypeface(typeface);


    String listArray[] = new String[] { "India", "England", "Canada",
            "New zealand", "South Africa", "Pakistan", "West indies" };
    int icon[] = new int[] { R.drawable.ic_launcher, R.drawable.ic_launcher,
            R.drawable.ic_launcher, R.drawable.ic_launcher,
            R.drawable.ic_launcher, R.drawable.ic_launcher,
            R.drawable.ic_launcher };

    ListView listView = (ListView) findViewById(R.id.listView);
    List<HashMap<String, String>> aList = new ArrayList<HashMap<String, String>>();

    for (int i = 0; i <= listArray.length - 1; i++) {

        HashMap<String, String> hm = new HashMap<String, String>();
        hm.put("title", listArray[i]);
        hm.put("icon", Integer.toString(icon[i]));
        aList.add(hm);
    }

    String[] sfrm = { "title", "icon" };
    int[] sto = { R.id.title, R.id.list_image};

    SimpleAdapter adapter = new SimpleAdapter(getBaseContext(), aList,
            R.layout.row_layout, sfrm, sto);



    listView.setAdapter(adapter);

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View view,
                                int position, long id) {

            switch (position) {

                case 0:
                    Toast.makeText(getApplicationContext(), "",
                            Toast.LENGTH_SHORT).show();
                    break;
                case 1:
                    Toast.makeText(getApplicationContext(), "",
                            Toast.LENGTH_SHORT).show();
                    break;
                case 2:
                    Toast.makeText(getApplicationContext(), "",
                            Toast.LENGTH_SHORT).show();
                    break;
                case 3:
                    Toast.makeText(getApplicationContext(), "",
                            Toast.LENGTH_SHORT).show();
                    break;
                case 4:
                    Toast.makeText(getApplicationContext(), "",
                            Toast.LENGTH_SHORT).show();
                    break;
                case 5:
                    Toast.makeText(getApplicationContext(), "",
                            Toast.LENGTH_SHORT).show();
                    break;
                case 6:
                    Toast.makeText(getApplicationContext(), "",
                            Toast.LENGTH_SHORT).show();
                    break;

            }

        }
    });
}

@Override
public void onBackPressed() {
    super.onBackPressed();
    overridePendingTransition(R.anim.animation8, R.anim.animation7);
    }
}

row_layout.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="5dip" >


<LinearLayout
    android:id="@+id/thumbnail"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_marginRight="5dip"
    android:padding="3dip" >

    <ImageView
        android:id="@+id/list_image"
        android:layout_width="50dip"
        android:layout_height="50dip"
        android:src="@drawable/ic_launcher" />
</LinearLayout>



<TextView
    android:id="@+id/title"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerVertical="true"
    android:layout_toRightOf="@+id/thumbnail"
    android:text="Country name"
    android:textColor="#FFFFFF"
    android:textSize="30sp"
    android:typeface="sans" />

</RelativeLayout>

So that is my code, as you can see there is a textview with the id "title". How can I change the font of title? I'd really apreciate it if you answer the question based on my code, because I already tried all the other solutions on SO but with no succes

CristianoWilson
  • 141
  • 1
  • 19

4 Answers4

1

Here is a detailed explanation of the issue.

http://javatechig.com/android/using-external-fonts-in-android-view

Basically for you, since it's in a listview I recommend that you create the custom textview. It's important to place you font files in the assets folder.

Saying that you tried all the other sources with no success is just wrong, as the above link appears like the second google search result and works perfectly.

dzsonni
  • 194
  • 1
  • 13
1

Hi Cristiano,

I think i traced out your problem changing font.

At your code:
Typeface typeface = Typeface.createFromAsset(getAssets(), "BebasNeue Bold.ttf");
tv.setTypeface(typeface);

Change like below and try out:
Typeface typeface = Typeface.createFromAsset(getAssets(), "customfont.ttf");
tv.setTypeface(typeface);

Please change the ttf file name to any name in smaller letters with no space in between letters and try out then it will work.

Ram
  • 114
  • 12
  • That is another textView, and the font works fine on that tV. What I need is the textView declared in row_layout.xml to be a custom font – CristianoWilson Aug 18 '14 at 09:24
  • Then use baseadapter instead of simple adapter so that you can customise in getView() method of that. – Ram Aug 18 '14 at 09:27
  • class customAdapter extends BaseAdapter{ @override Public void getView(){ . . . TextView text=(textView)findViewById(R.id.title); text.setTypeface(tv); } } – Ram Aug 18 '14 at 09:28
0

You'll have to create a custom adapter, and in the getView method, put the font to your views :

public class ListAdapter extends ArrayAdapter<Item> {

public ListAdapter(Context context, int textViewResourceId) {
    super(context, textViewResourceId);
}

public ListAdapter(Context context, int resource, List<Item> items) {
    super(context, resource, items);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    View v = convertView;

    if (v == null) {

        LayoutInflater vi;
        vi = LayoutInflater.from(getContext());
        v = vi.inflate(R.layout.itemlistrow, null);

    }
    TextView tv = (TextView) v.findViewById(R.id.tv_name);
    tv.setTypeface(typeFace);
    ...
}
FR073N
  • 2,011
  • 4
  • 29
  • 42
  • Create your own custom adapter for your listView. You'll not use SimpleAdapter adapter = new SimpleAdapter(getBaseContext(), aList, R.layout.row_layout, sfrm, sto); anymore but CustomAdapter adapter = new CustomAdapter... (here I named my CustomAdapter, ListAdapter). Here is a tutorial : http://androidexample.com/How_To_Create_A_Custom_Listview_-_Android_Example/index.php?view=article_discription&aid=67&aaid=92 – FR073N Aug 18 '14 at 09:36
0

Try this way,hope this will help you to solve your problem.

public class MyActivity3 extends Activity {
    private TextView tv;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my3);
        Button m = (Button) findViewById(R.id.button3);
        tv = (TextView) findViewById(R.id.textViewcat);
        Typeface typeface = Typeface.createFromAsset(getAssets(), "BebasNeue Bold.ttf");
        tv.setTypeface(typeface);


        String listArray[] = new String[] { "India", "England", "Canada",
                "New zealand", "South Africa", "Pakistan", "West indies" };
        int icon[] = new int[] { R.drawable.ic_launcher, R.drawable.ic_launcher,
                R.drawable.ic_launcher, R.drawable.ic_launcher,
                R.drawable.ic_launcher, R.drawable.ic_launcher,
                R.drawable.ic_launcher };

        ListView listView = (ListView) findViewById(R.id.listView);
        ArrayList<HashMap<String, String>> aList = new ArrayList<HashMap<String, String>>();

        for (int i = 0; i <= listArray.length - 1; i++) {

            HashMap<String, String> hm = new HashMap<String, String>();
            hm.put("title", listArray[i]);
            hm.put("icon", Integer.toString(icon[i]));
            aList.add(hm);
        }
//
//        String[] sfrm = { "title", "icon" };
//        int[] sto = { R.id.title, R.id.list_image};
//
//        SimpleAdapter adapter = new SimpleAdapter(getBaseContext(), aList,
//                R.layout.row_layout, sfrm, sto);


        listView.setAdapter(new CustomAdapter(this,aList));

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> arg0, View view,
                                    int position, long id) {

                switch (position) {

                    case 0:
                        Toast.makeText(getApplicationContext(), "",
                                Toast.LENGTH_SHORT).show();
                        break;
                    case 1:
                        Toast.makeText(getApplicationContext(), "",
                                Toast.LENGTH_SHORT).show();
                        break;
                    case 2:
                        Toast.makeText(getApplicationContext(), "",
                                Toast.LENGTH_SHORT).show();
                        break;
                    case 3:
                        Toast.makeText(getApplicationContext(), "",
                                Toast.LENGTH_SHORT).show();
                        break;
                    case 4:
                        Toast.makeText(getApplicationContext(), "",
                                Toast.LENGTH_SHORT).show();
                        break;
                    case 5:
                        Toast.makeText(getApplicationContext(), "",
                                Toast.LENGTH_SHORT).show();
                        break;
                    case 6:
                        Toast.makeText(getApplicationContext(), "",
                                Toast.LENGTH_SHORT).show();
                        break;

                }

            }
        });
    }

    @Override
    public void onBackPressed() {
        super.onBackPressed();
        overridePendingTransition(R.anim.animation8, R.anim.animation7);
    }

    class CustomAdapter extends BaseAdapter{
        private Context context;
        private ArrayList<HashMap<String,String>> data;
        public CustomAdapter(Context context,ArrayList<HashMap<String,String>> data){
            this.context=context;
            this.data=data;
        }
        @Override
        public int getCount() {
            return data.size();
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public Object getItem(int position) {
            return data.get(position);
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ViewHolder viewHolder;
            if(convertView==null){
                viewHolder =new ViewHolder();
                convertView = LayoutInflater.from(context).inflate(R.layout.row_layout,null);
                viewHolder.list_image = (ImageView) convertView.findViewById(R.id.list_image);
                viewHolder.title = (TextView) convertView.findViewById(R.id.title);
                Typeface typeface = Typeface.createFromAsset(getAssets(), "yourcustomfontname.ttf");
                viewHolder.title.setTypeface(typeface);
                convertView.setTag(viewHolder);
            }else{
                viewHolder = (ViewHolder) convertView.getTag();
            }
            viewHolder.title.setText(data.get(position).get("title"));
            viewHolder.list_image.setImageResource(Integer.parseInt(data.get(position).get("icon")));
            return null;
        }

        class ViewHolder{
            ImageView list_image;
            TextView title;
        }
    }
}
Haresh Chhelana
  • 24,720
  • 5
  • 57
  • 67