пользовательский шрифт в android ListView

Я использую пользовательский шрифт во всем приложении (что, кстати, я, к сожалению, обнаружил, что вам нужно применять программно вручную для КАЖДОГО элемента управления!), И мне нужно применить его к списку. Проблема в том, что я не вижу, где бы я установил текстовое представление, используемое в шрифте списка, для моего пользовательского шрифта (поскольку я никогда не создавал его экземпляр – это все позаботится адаптер).

В идеале я бы хотел использовать адаптер следующим образом:

new ArrayAdapter(Context context, TextView textView, List objects) 

Таким образом я мог бы сделать: textView.setTypeface перед заполнением моего списка. Кто-нибудь знает, есть ли способ сделать что-то в этом направлении?

    Вы не можете этого сделать, потому что ресурс текстового представления, который вы передаете в ArrayAdapter, накачивается каждый раз, когда он используется.

    Вам нужно создать свой собственный адаптер и предоставить собственное представление.

    Примером для вашего адаптера может быть

     public class MyAdapter extends BaseAdapter { private List objects; // obviously don't use object, use whatever you really want private final Context context; public CamAdapter(Context context, List objects) { this.context = context; this.objects = objects; } @Override public int getCount() { return objects.size(); } @Override public Object getItem(int position) { return objects.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { Object obj = objects.get(position); TextView tv = new TextView(context); tv.setText(obj.toString()); // use whatever method you want for the label // set whatever typeface you want here as well return tv; } 

    }

    И тогда вы могли бы установить это как таковое

     ListView lv = new ListView(this); lv.setAdapter(new MyAdapter(objs)); 

    Надеюсь, это должно заставить вас идти.

    Если вы не хотите создавать новый class, вы можете переопределить метод getView при создании адаптера, это пример простого адаптера с заголовком и субтитрами:

     Typeface typeBold = Typeface.createFromAsset(getAssets(),"fonts/helveticabold.ttf"); Typeface typeNormal = Typeface.createFromAsset(getAssets(), "fonts/helvetica.ttf"); SimpleAdapter adapter = new SimpleAdapter(this, items,R.layout.yourLvLayout, new String[]{"title", "subtitle" }, new int[] { R.id.rowTitle, R.id.rowSubtitle }){ @Override public View getView(int pos, View convertView, ViewGroup parent){ View v = convertView; if(v== null){ LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); v=vi.inflate(R.layout.yourLvLayout, null); } TextView tv = (TextView)v.findViewById(R.id.rowTitle); tv.setText(items.get(pos).get("title")); tv.setTypeface(typeBold); TextView tvs = (TextView)v.findViewById(R.id.rowSubtitle); tvs.setText(items.get(pos).get("subtitle")); tvs.setTypeface(typeNormal); return v; } }; listView.setAdapter(adapter); 

    где элементы – это ArrayList карт

    надеюсь, это поможет

    Похоже, что конструктор ошибочен

    измените его на:

     public MyAdapter (Context context, List objects) { this.context = context; this.objects = objects; } 

    это сработало для меня.

    Попробуйте это для массивов:

     Typeface typeNormal = Typeface.createFromAsset(getAssets(), "roboto_lite.ttf"); timearray = new ArrayAdapter(DetailsActivity.this,R.layout.floorrow,R.id.txt, flor) { public View getView(int pos, View convertView, android.view.ViewGroup parent) { View v = convertView; if (v == null) { LayoutInflater vi = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); v = vi.inflate(R.layout.floorrow, null); } TextView tv = (TextView)v.findViewById(R.id.txt); tv.setText(flor.get(pos)); tv.setTypeface(typeNormal); return v; }; }; lv_building.setAdapter(timearray); 

    В дополнение к реакции Моисеса Ольмедо – альтернативный вариант без создания нового classа:

      tf = Typeface.createFromAsset(getAssets(), fontPath); recordsAdapter = new SimpleCursorAdapter(this, R.layout.item1, cursor, from, to); recordsAdapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() { public boolean setViewValue(View view, Cursor cursor, int columnIndex) { if (columnIndex == 1) { final TextView tv = (TextView) view; tv.setTypeface(tf); } return false; } }); 

    Сначала скопируйте и вставьте файлы шрифтов в папку assets / fonts. Затем укажите текст.

      Typeface font=Typeface.createFromAsset(activity.getAssets(), "fonts/.ttf"); holder.text.setTypeface(font); holder.text.setText("your string variable here"); 

    Вы можете установить базовый адаптер, как, например, следующие шаги. Может помочь вам

    Определите базовый адаптер

     public class LessonAdapter extends BaseAdapter { private Context mContext; public LessonAdapter(Context mContext, ArrayList titles) { super(); this.mContext = mContext; } public int getCount() { // TODO Auto-generated method stub if (titles!=null) return titles.size(); else return 0; } public Object getItem(int arg0) { // TODO Auto-generated method stub return null; } public long getItemId(int arg0) { // TODO Auto-generated method stub return 0; } public View getView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater = (LayoutInflater) mContext .getSystemService(Context.LAYOUT_INFLATER_SERVICE); View v = convertView; try { if (v == null) { v = inflater.inflate(R.layout.lesson_item, null); } TextView title = (TextView) v.findViewById(R.id.title); Typeface tf = Typeface.createFromAsset(getAssets(), "fonts/Rabiat_3.ttf"); title.setTypeface(tf); title.setText(titles.get(position).toString()); } catch (Exception e) { Log.d("searchTest", e.getMessage()); } return v; } } 

    по методу TypeFace вы можете установить свой шрифт, добавив папку «Шрифты» в «Активы», затем добавьте шрифт в папку «Шрифты»

    затем установить адаптер

     adapter = new LessonAdapter(LessonsTitle.this, titles); setListAdapter(adapter); 

    holder.txt_name.setTypeface (Typeface.createFromAsset (activity.getAssets (), “font / nasimbold.ttf”));

    Давайте будем гением компьютера.