Search code examples
androidlistviewandroid-typeface

How to change each list item front in a listview


I am having 5 font styles (Typeface) and want to show user input 5 times into a ListView in different font style. Below is my code I have tried.

 public void ShowTextStyles(String inputText, int color){
    final Dialog dialog = new Dialog(EditImageActivity.this);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.setContentView(R.layout.textstylelayout);
    dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
    // Array of strings...
    final String[] textStyles={"Gobold Bold.ttf","beyond_wonderland.ttf"};
    final String[] mobileArray = {inputText,inputText,inputText,inputText,inputText,inputText,inputText,inputText,inputText,inputText};
    ArrayAdapter adapter = new ArrayAdapter<String>(EditImageActivity.this,
            R.layout.text_style_list, mobileArray);

    ListView listView = (ListView) dialog.findViewById(R.id.mobile_list);
    listView.setAdapter(adapter);

    // Set an item click listener for ListView
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            // Get the selected item text from ListView
            String selectedItem = (String) parent.getItemAtPosition(position);

            // Display the selected item text on TextView




        }
    });
    dialog.setCancelable(true);
    dialog.show();


}

Solution

  • Create custom adapter and use it for your listview:

    public class TestAdapter extends BaseAdapter {
        private Context context;
        private List<String> appData;
        String[] fontFiles = {"Gobold Bold.ttf", "beyond_wonderland.ttf"}; // add more fonts if wish more styles
    
    public TestAdapter(Context context, List<String> appData) {
        this.context = context;
        this.appData = appData;
    }
    
    @Override
    public int getCount() {
        return appData.size();
    }
    
    @Override
    public Object getItem(int position) {
        return appData.get(position);
    }
    
    @Override
    public long getItemId(int position) {
        return 0;
    }
    
    private class ViewHolder {
        TextView tv_item;
    }
    
    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        ViewHolder holder = null;
        if (convertView == null) {
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = inflater.inflate(R.layout.list_app, null);
            holder = new ViewHolder();
            holder.tv_item = convertView.findViewById(R.id.tv_item);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
    
        holder.tv_item.setText(appData.get(position));
        Typeface typeface;
    
        // change this condition according to your need
        if (position == 0){
            typeface = Typeface.createFromAsset(context.getAssets(), fontFiles[0]);
        }else {
            typeface = Typeface.createFromAsset(context.getAssets(), fontFiles[1]);
        }
    
        holder.tv_item.setTypeface(typeface);
    
        return convertView;
    }
    }