Палитра цветов в раскрывающемся списке Android

Я хочу создать раскрывающийся список цветов, что-то вроде этого (извините за уродливое изображение):

выпадающий список цветов

Мне нужны только некоторые цвета (скажем, 6), поэтому мне не нужна полная палитра цветов, выпадающий список будет работать нормально.

Я знаю, что мне нужно расширить адаптер массива для Spinner и переопределить getDropDownView и getView.

Чего я не знаю, так это того, как создать квадратную рамку с рамкой и сплошным цветом фона.

Я знаю, что могу определить свою собственную форму внутри drawable. В любом случае мне нужно установить цвет фона во время выполнения, поэтому мне также нужно изменить вид и установить правильный цвет фона.

Как лучше всего это сделать? Спасибо.


person Antonio    schedule 31.10.2012    source источник


Ответы (1)


Если вы хотите использовать только цвет фона, вы можете использовать этот пример.

public class CustomSpinnerAdapter<T extends BaseEntity> extends ArrayAdapter implements SpinnerAdapter {    

    private final List<T> objects; // android.graphics.Color list

    public CustomSpinnerAdapter(Context context, List<T> objects) {
        super(context, R.layout.yourLayout, objects);
        this.context = context;
        this.objects = objects;

    }

    @Override
    public View getDropDownView(int position, View convertView, ViewGroup parent) {
        super.getDropDownView(position, convertView, parent);

        View rowView = convertView;


        if (rowView == null) {
            // Get a new instance of the row layout view
            LayoutInflater inflater = this.activity.getLayoutInflater();
            rowView = inflater.inflate(R.layout.yourLayout, null);

            rowView.setBackgroundColor(objects.get(position));

        } else {
            rowView.setBackgroundColor(objects.get(position));
        }


        return rowView;
    }

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


        if (rowView == null) {
            // Get a new instance of the row layout view
            LayoutInflater inflater = this.activity.getLayoutInflater();
            rowView = inflater.inflate(R.layout.yourLayout, null);

            rowView.setBackgroundColor(objects.get(position));

        } else {
            rowView.setBackgroundColor(objects.get(position));
        }


        return rowView;
    }
}
person KEYSAN    schedule 31.10.2012