Проблемы со стилем панели действий

Мне нужно добавить выпадающий список в панель действий. Я пробовал много разных способов сделать это, но каждый демонстрирует свой конкретный недостаток. Вот результаты 2-х попыток.

введите здесь описание изображения

Верхний — это спиннер, добавленный в панель действий с помощью actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);. Никакие стили не используются, за исключением всей темы приложения, то есть @style/Theme.Sherlock. (Приложение должно выглядеть одинаково на новых и старых устройствах, поэтому используется ActionBarSherlock.) Как видите, этот метод создает черный цвет текста на темном/черном фоне. Выбранный элемент «показывается» на панели действий черным шрифтом на черном фоне. (По умолчанию это были макеты android.R.layout.simple_spinner_item и android.R.layout.simple_spinner_dropdown_item, но я пробовал и пользовательские со ссылками на разные доступные стили).

Например:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, test);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
actionBar.setListNavigationCallbacks(adapter, new ActionBar.OnNavigationListener()
...

Второе — это меню. По цветам вроде нормально. Я хотел бы иметь тот же стиль (цвета, размер шрифта, выравнивание) в счетчике. Но я не могу получить это после того, как поиграл с множеством предложений, найденных в Интернете, и в частности на SO. Обратите внимание, что я не хочу указывать жестко заданные цвета в своем пользовательском стиле. Я хочу наследовать их от существующих стилей (системные или голографические темы Шерлока). И родительские стили должны быть известны на уровне API 10. В любом случае, это приемлемый стиль для меню. Мне нужно только переместить его на спиннер.

Подход с меню может быть обходным путем, но ему не хватает маленького треугольника в правом нижнем углу, указывающего на то, что пользователю будет представлен раскрывающийся список. Я знаю, что это происходит из списка состояний счетчика, который можно нарисовать, и я могу применить тот же фон к пунктам меню. Но это влияет на ВСЕ пункты меню, тогда как мне нужно показать треугольник только на пунктах с подменю.

Я был бы признателен за решение в любом направлении.


person Stan    schedule 08.04.2013    source источник
comment
запутался.. что вы хотите...??   -  person Dhaval Parmar    schedule 08.04.2013
comment
@DhavalSodhaParmar, мне нужно раскрывающееся меню с читаемыми цветами (например, светлый цвет на темном фоне, где светлый и темный цвета взяты из стандартной темы) с индикатором того, что раскрывающееся меню доступно.   -  person Stan    schedule 08.04.2013
comment
Опубликуйте код, в котором вы запускаете адаптер, используемый в списке навигации.   -  person rciovati    schedule 08.04.2013
comment
Поскольку Context передается конструктору ArrayAdapter, попробуйте Context context = getSupportActionBar().getThemedContext(); вместо this.   -  person rciovati    schedule 08.04.2013
comment
@rciovati, Пробовал. Не помогло.   -  person Stan    schedule 08.04.2013
comment
Этот образец работает для вас? bit.ly/ZIXyda   -  person rciovati    schedule 08.04.2013
comment
@rciovati, да, после изменения макета счетчика на R.layout.sherlock. у меня все заработало. Опубликуйте ответ.   -  person Stan    schedule 08.04.2013
comment
FWIW, у меня такая же проблема с использованием реализации панели действий в библиотеке поддержки appcompat (вместо ActionBarSherlock). К сожалению, нет ресурсов R.layout.sherlock_, к которым можно было бы вернуться.   -  person Kristopher Johnson    schedule 19.10.2013


Ответы (1)


Попробуйте код из примеров:

    mLocations = getResources().getStringArray(R.array.locations);

    Context context = getSupportActionBar().getThemedContext();
    ArrayAdapter<CharSequence> list = ArrayAdapter.createFromResource(context, R.array.locations, R.layout.sherlock_spinner_item);
    list.setDropDownViewResource(R.layout.sherlock_spinner_dropdown_item);

    getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
    getSupportActionBar().setListNavigationCallbacks(list, this);

Взято с: http://bit.ly/19mJdLK

person rciovati    schedule 08.04.2013
comment
Спасибо за ответ. Кстати, я не вижу примера использования спиннера в качестве вида действий (android:actionLayout), но даже с тематическим контекстом и макетами Шерлока спиннер там все равно не стилизован, то есть отображается как стандартный спиннер. Есть ли другой намек на это? - person Stan; 08.04.2013