Как я могу исправить стиль Spinner для Android 4.x в верхней части панели инструментов

В соответствии сAndroid документация, Стиль дизайна материала поддерживается для виджета Spinner.

Поэтому я решил использовать его в своем приложении, поместив его поверх панели инструментов.

макет / activity_base.xml

<android.support.v7.widget.Toolbar
    android:id="@+id/my_awesome_toolbar"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:minHeight="?attr/actionBarSize"
    android:background="?attr/colorPrimary"
    android:elevation="5dp"
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light">
    <Spinner
        android:id="@+id/spinner"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>
 </android.support.v7.widget.Toolbar>

Тема деятельности

<style name="BaseAppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/omni_primary_color</item>
    <item name="colorPrimaryDark">@color/omni_primary_color_dark</item>
    <item name="colorAccent">@color/omni_accent_color</item>
</style>

BaseActivity.java

public class BaseActivity extends ActionBarActivity {

    @InjectView(R.id.my_awesome_toolbar)
    Toolbar mToolbar;

    @InjectView(R.id.spinner)
    Spinner spinner;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_base);
        ButterKnife.inject(this);
        //setup toolbar
        setSupportActionBar(mToolbar);
        getSupportActionBar().setDisplayShowTitleEnabled(false);
        mToolbar.setNavigationIcon(R.drawable.ic_action_navigation_menu);

        ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(mToolbar.getContext(),
                R.array.planets_array, R.layout.support_simple_spinner_dropdown_item);
        adapter.setDropDownViewResource(R.layout.support_simple_spinner_dropdown_item);
        spinner.setAdapter(adapter);
    }
}

На Lollipop блесна и выпадающий список выглядят нормально, хотя цвет фона выпадающего меню черный по сравнению с выпадающим меню белого цвета. я думаю чтоapp:popupTheme="@style/ThemeOverlay.AppCompat.Light" не распространяется на счетчик.

Android 5.0

Теперь большая проблема в Android 4.x, где цвет фона выпадающего меню белый (popupTheme распространяется?), А значок рядом со спиннером - черный.

Android 4.4

Как правильно установить его в XML или реализовать в коде, чтобы он работал на Android 5 и 4? В идеале, я бы хотел, чтобы оба выглядели как на Android 5, но с выпадающим списком белого блесна (как в выпадающем меню «Настройка»).

Обновить

Я заметил, что установка свойстваcolorControlNormal влияет на значок фильтра счетчика. Если кто-то узнает, как использовать это для Spinner (не изменяя другие элементы управления контентом), то у меня будет решение, сочетающее эту находку с ответом @Sven.

Обновить

Следующее изменение устраняет проблему с цветом текста и всплывающего окна. Таким образом, единственной проблемой для окончательного решения является значок фильтра.

ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getSupportActionBar().getThemedContext(),
                R.array.planets_array, R.layout.support_simple_spinner_dropdown_item);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

Обновить

Я обнаружил, что значок фильтра на самом деле является частьюandroid:background указано для блесны и оно прозрачное. Предоставление собственного фона исправит это, например.

<item name="android:background">?android:selectableItemBackground</item>

Тайна разгадана!

Последняя часть головоломки - это всплывающее окно на Android 5 с черным фоном и белым текстом, но я думаю, что это можно решить с помощью пользовательского макета. Если никто не дает полного ответа, я сделаю это сам и отмечу как принятый.

Ответы на вопрос(15)

Ваш ответ на вопрос