Как изменить размер текста и ориентацию счетчика - PullRequest
1 голос
/ 26 июля 2011

Мне нужно изменить размер текста и ориентацию выбранного элемента, показанного на счетчике, но также мне нужно продолжать использовать макет по умолчанию для счетчика: android.R.layout.simple_spinner_item

Почему?Потому что, если я использую персонализированный макет, я не могу загружать динамически сгенерированные массивы строк на счетчик.Это ошибка Android: S

Может кто-нибудь помочь мне, пожалуйста?

1 Ответ

1 голос
/ 26 июля 2011

Хорошо, это немного сложно, но не слишком сложно.

  1. Расширение SimpleAdapter, создание настраиваемого адаптера.
  2. Убедитесь, что вы внедрили SpinnerAdapter в этот новый адаптер.(если вы используете Eclipse, позвольте ему помочь вам, создавая нереализованные методы)
  3. Реализация SpinnerAdapter заставит вас добавить объект xml ресурса с раскрывающимся списком.Добавьте его статически или определите установщик.
  4. Внутри public View getView(int position, View convertView, ViewGroup parent) (где вы возвращаете пользовательский вид в Spinner), вызовите parent.getSelectedItem(), чтобы увидеть, совпадает ли он с элементом на position в вашем списке.
  5. Если это так, установите шрифт побольше.Если нет, установите его в обычном режиме (не забудьте сделать это, так как счетчик будет перерабатывать представления, оставляя ваш больший шрифт на месте).

Чтобы использовать адаптер, вызовите что-то подобное из вашегоАктивность:

MyCustomSpinnerAdapter adapter = new MyCustomSpinnerAdapter(this, myListOfItems);
adapter.setDropDownViewResource(R.layout.my_dropdown_view_resource);
mySpinner.setAdapter(adapter);

Чтобы узнать, как Google это делает, взгляните в google codesearch здесь и выполните поиск по запросу "Android ArrayAdapter.java". Нажмите ядро ​​/ java / android /ссылка на виджет, и вы попадете в пакет со всеми различными адаптерами, интерфейсами и виджетами, которые вам нужны, чтобы понять остальное.

Удачи.

РЕДАКТИРОВАТЬ: Вотнепроверенный первый взлом на это в качестве примера:

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Spinner;
import android.widget.SpinnerAdapter;
import android.widget.TextView;

import com.beget.consumer.R;

public class MyCustomSpinnerAdapter extends BaseAdapter implements SpinnerAdapter {

    private String[] list;
    private Context context;

    public MyCustomSpinnerAdapter(Context context, String[] list) {
        super();
        this.list = list;
        this.context = context;
        // TODO Auto-generated constructor stub
    }

    @Override
    public int getCount() {
        return list.length;
    }

    @Override
    public Object getItem(int position) {
        //you need to add index safety here - make sure that position is a valid index
        return list[position];
    }

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

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

        ViewHolder holder;

        if (convertView == null) {
            convertView = context.inflate(R.layout.my_view_item, null);
            holder = new ViewHolder();
            holder.myView = (TextView) convertView.findViewById(R.id.beget_box_description);

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

        }

        if (list[position] == ((Spinner) parent).getSelectedItem()) {
            holder.myView.setTextSize(25);
        } else {
            holder.myView.setTextSize(15);
        }

        holder.myView.setText(list[position]);

        return convertView;
    }

    @Override
    public View getDropDownView(int position, View convertView, ViewGroup parent) {
        //change this if you want a different view for your dropdown list. It's the same as above, except you could 
        //inflate a different view if you wanted.
        return getView(position, convertView, parent);
    }

    static class ViewHolder {
        TextView myView;
    }

}
...