Как изменить textColor всех элементов во всплывающем окне счетчика Android?

Я работаю над приложением, которое представляет пользователю два графических объекта. Каждый объект связан с соответствующим счетчиком, из которого пользователь может выбрать один из нескольких атрибутов. Прикосновение к одному счетчику деактивирует другой (это обрабатывается вне spinner.setEnabled.)

Представление содержит одну панель поиска, из которой пользователь может управлять диапазоном значений, применяемых к последнему выбранному атрибуту.

Цвет является одним из атрибутов. По мере перемещения панели поиска я могу изменить цвет фона всплывающих элементов. Мне нужно установить цвет текста всех элементов черным для светлых цветов фона и белым для всех темных цветов.

    if ( pos == object.COLOR_INDEX) {
             //change spinner Background and Text color
             spinner.setBackgroundColor(Colors.BACKGROUND[objectCurrent.getParams(pos)]);
             TextView v ; int ct ;
             for(int i=0; i<(ct=spinner.getChildCount()); ++i) {
                 v= (TextView)spinner.getChildAt(i);
                 v.setTextColor(Colors.FOREGROUND[objectCurrent.getParams(pos)]);
             }



             ColorDrawable drawable=(ColorDrawable) spinner.getBackground() ;
             spinner.setPopupBackgroundDrawable(drawable);
             spinner.setSelection(0); spinner.setSelection(pos);
    }

Я не нашел способ сделать это. Перебор spinner.getChildAt(i) влияет только на отображаемый в данный момент элемент, а не на элементы, скрытые во всплывающем окне.

Я буду признателен за любые предложения.


person Steve Dutky    schedule 04.07.2015    source источник


Ответы (1)


Это, по-видимому, помогает:

    Resources res=getResources();
    final List<String> spinnerItems=new ArrayList<String>(Arrays.asList(res.getStringArray(R.array.spin_settings)));

    ArrayAdapter<String> aa=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item,spinnerItems){
        public View getDropDownView(int position, View convertView,
                                    ViewGroup parent) {
            View v = super.getDropDownView(position, convertView,
                    parent);

            ((TextView) v).setTextColor(Colors.FOREGROUND[obj.getParams(param.COLOR_INDEX)]);
            ((TextView) v).setBackgroundColor(Colors.BACKGROUND[obj.getParams(param.COLOR_INDEX)]);


            return v;
        }

    };

     aa.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);



    spinnerLeft.setAdapter(aa);
    spinnerRight.setAdapter(aa);

Событие getDropDownView, похоже, возникает для каждого элемента в раскрывающемся списке.

person Steve Dutky    schedule 18.07.2015
comment
Почему вы передаете android.R.layout.simple_spinner_item конструктору, а затем устанавливаете раскрывающийся ресурс simple_spinner_dropdown_item? - person IgorGanapolsky; 14.10.2015