Как изменить размер текста и ориентацию счетчика

1

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

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

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

  • 0
    Я не думаю, что это отказ Android, я думаю, что вы не потратили достаточно времени, чтобы понять, как правильно использовать счетчик. Он отлично работает с динамически добавляемыми элементами, даже если вы используете пользовательский макет элемента.
  • 0
    Иназарук, приятно сказать: «это работает», но если вы потратите время на чтение моего поста, вы поймете, что я пытался это сделать, выполняя поиск в stackoverflow и в Google, и я не нашел способ сделать это. это, потому что это, я открываю этот вопрос. Тогда, если вы знаете, как это сделать ... расскажите, как это сделать ...
Теги:
android-layout
spinner

1 ответ

1
Лучший ответ

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

  1. Расширьте SimpleAdapter, создав пользовательский адаптер.
  2. Убедитесь, что вы используете SpinnerAdapter в этом новом адаптере. (если вы используете Eclipse, пусть это поможет вам, создав нереализованные методы)
  3. Внедрение SpinnerAdapter заставит вас добавить объект xml-ресурса с раскрывающимся SpinnerAdapter. Добавьте его статически или определите сеттер.
  4. Внутри public View getView(int position, View convertView, ViewGroup parent) (в котором вы возвращаете пользовательский вид Spinner) вызовите parent.getSelectedItem() чтобы увидеть, 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 the same as above, except you could 
        //inflate a different view if you wanted.
        return getView(position, convertView, parent);
    }

    static class ViewHolder {
        TextView myView;
    }

}
  • 0
    Я не понимаю, как это сделать, это слишком сложно для моих навыков. Я пытаюсь найти примеры и помощь в Google, но это не возможно найти их. Я думаю, что этот ответ не может быть реализован правильно и работает.
  • 0
    Я добавил (непроверенный) пример. Это должно в значительной степени делать то, что вы хотите. Никаких гарантий, однако!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню