Как изменить тип шрифта, когда textview является частью списка - PullRequest
1 голос
/ 16 февраля 2012

У меня есть список, заполненный так:

lv1 = (ListView) findViewById(R.id.ListView01);

ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();
HashMap<String, String> map = new HashMap<String, String>();
map.put("product", "Bread");
map.put("quantity", "1");
map.put("unit", "pcs");
mylist.add(map);

map = new HashMap<String, String>();
map.put("product", "Books for mom");
map.put("quantity", "14");
map.put("unit", "pcs");
mylist.add(map);

map = new HashMap<String, String>();
map.put("product", "Mineral water");
map.put("quantity", "2");
map.put("unit", "l");
mylist.add(map);

SimpleAdapter mSchedule = new SimpleAdapter(this, mylist, R.layout.grlists,
    new String[] {"product", "quantity", "unit"}, new int[] {R.id.CPRODUCT, R.id.CQUANTITY, R.id.CUNIT});
lv1.setAdapter(mSchedule);

Это макет списка (grlists.xml):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:paddingTop="4dip"
     android:paddingBottom="6dip"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:orientation="horizontal">
    <CheckBox android:id="@+id/checkbox"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" />
     <TextView android:id="@+id/CPRODUCT"
         android:layout_width="200dip"
         android:layout_height="wrap_content"
         android:textColor="#000000"
         android:paddingLeft="5dip"
         android:background="#EBDDE2"/>

     <TextView android:id="@+id/CQUANTITY"
         android:layout_width="30dip"
         android:layout_height="wrap_content" android:layout_weight="1"
          android:textColor="#000000"
          android:background="#B4CFEC"/>

     <TextView android:id="@+id/CUNIT"
         android:layout_width="30dip"
         android:layout_height="wrap_content"  android:layout_weight="1"
          android:textColor="#000000"
          android:background="#A5A1A0"/>
</LinearLayout>

Это дает мне nullpointerexception, потому что он ищет текстовое представление CPRODUCT в основном макете.

Typeface tf = Typeface.createFromAsset(getAssets(), "fonts/PopStarAutograph.ttf");
TextView tv1 = (TextView) findViewById(R.id.CPRODUCT);
tv1.setTypeface(tf);

Как программно изменить тип шрифта для текстовых представлений?

1 Ответ

0 голосов
/ 05 июня 2012

Поскольку Дмитрий Данилык не добавил свое решение в качестве ответа, я добавляю его, чтобы закрыть этот вопрос. Тем не менее, в последние месяцы я освоил эту область, поэтому я добавил немного другой ответ, когда он писал.

Прежде всего, нам нужны массивы для отображения в виде списка. Это представление списка построено на специальном адаптере, который получает элементы из массивов. В этом пользовательском адаптере мы можем делать что угодно с элементами в каждой строке списка, независимо от того, о каких элементах мы говорим. Будь то просмотр текста, просмотр изображений или флажок и т. Д.

Давайте представим, что у нас есть 5 элементов в строке списка: 5 текстовых представлений. После заполнения 5 массивов мы определяем наш адаптер как:

adapter = new ListViewCustomAdapter(Calllogs.this, arr_calllog_name, arr_calllog_phone, arr_calllog_type,arr_calllog_duration, arr_calllog_date);

И вот как мы устанавливаем наш адаптер на просмотр списка:

lv1.setAdapter(adapter);

И, наконец, нам нужно создать наш ListViewCustomAdapter (назовите его как хотите):

public class ListViewCustomAdapter extends BaseAdapter
{
    public String title[];
    public String description[];
    ArrayList<String> arr_calllog_name = new ArrayList<String>();
    ArrayList<String> arr_calllog_phone = new ArrayList<String>();
    ArrayList<String> arr_calllog_type = new ArrayList<String>();
    ArrayList<String> arr_calllog_date = new ArrayList<String>();
    ArrayList<String> arr_calllog_duration = new ArrayList<String>();

    public Activity context;
    public LayoutInflater inflater;

    public ListViewCustomAdapter(Activity context,  ArrayList<String> arr_calllog_name, ArrayList<String> arr_calllog_phone, ArrayList<String> arr_calllog_type, ArrayList<String> arr_calllog_duration, ArrayList<String> arr_calllog_date) {
        super();

        this.context = context;
        this.arr_calllog_type = arr_calllog_type;
        this.arr_calllog_name = arr_calllog_name;
        this.arr_calllog_phone = arr_calllog_phone;
        this.arr_calllog_date = arr_calllog_date;
        this.arr_calllog_duration = arr_calllog_duration;


        this.inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return arr_calllog_name.size();
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return 0;
    }

    public static class ViewHolder
    {
        TextView txtViewTitle;
        TextView txtViewDescription;
        TextView txtDate;
        TextView txtDuration;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub

        ViewHolder holder;
        if(convertView==null)
        {
            holder = new ViewHolder();
            convertView = inflater.inflate(R.layout.calllog_row, null);

            holder.txtViewTitle = (TextView) convertView.findViewById(R.id.calllogquery_name);
            holder.txtViewDescription = (TextView) convertView.findViewById(R.id.calllogquery_phone);
            holder.txtDate = (TextView) convertView.findViewById(R.id.calllogquery_date);
            holder.txtDuration = (TextView) convertView.findViewById(R.id.calllogquery_duration);

            convertView.setTag(holder);
        }
        else
            holder=(ViewHolder)convertView.getTag();

        int teljes = Integer.parseInt(arr_calllog_duration.get(position));
        int h = teljes / 3600;
        int mar_h = teljes - h * 3600;
        int m = mar_h / 60;
        int s = mar_h - m * 60;
        String hh, mm, ss;
        if (h < 10)                 {                   hh = "0" + Integer.toString(h);             }
        else                {                   hh = Integer.toString(h);               }
        if (m < 10)                 {                   mm = "0" + Integer.toString(m);             }
        else                {                   mm = Integer.toString(m);               }
        if (s < 10)             {                   ss = "0" + Integer.toString(s);             }
        else                {                   ss = Integer.toString(s);               }

        String dur_edited = hh + ":" + mm + ":" + ss;


        holder.txtViewTitle.setText(arr_calllog_name.get(position));
        holder.txtViewDescription.setText(arr_calllog_phone.get(position));
        holder.txtDate.setText(arr_calllog_date.get(position));
        holder.txtDuration.setText(dur_edited);

        return convertView;
    }

}

Как видите, этот адаптер имеет 5 параметров, как и наши 5 массивов. Это все. О, и мы также должны сначала определить наш адаптер как ListViewCustomAdapter adapter;.

Вы можете использовать этот класс адаптера в отдельном классе или в своей деятельности вне метода onCreate ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...