¿Cómo puedo arreglar el estilo Spinner para Android 4.x colocado en la parte superior de la barra de herramientas

De acuerdo aDocumentación de Android, El estilo de diseño de materiales es compatible con el widget Spinner.

Así que decidí usarlo en mi aplicación colocándolo encima de la barra de herramientas.

layout / 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>

Tema de la actividad

<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);
    }
}

En Lollipop, el menú desplegable y el menú desplegable se ven bien, aunque el color de fondo desplegable es negro en comparación con el menú desplegable que es blanco. Supongoapp:popupTheme="@style/ThemeOverlay.AppCompat.Light" no se propaga a la ruleta.

Android 5.0

Ahora el gran problema es con Android 4.x, donde el color de fondo desplegable es blanco (¿popupTheme propagado?) Y el ícono al lado del spinner es negro.

Android 4.4

¿Cómo puedo configurarlo correctamente en el XML o implementarlo en el código para que funcione en Android 5 y 4? Idealmente, me gustaría tener ambas miradas en Android 5 pero con un menú desplegable giratorio blanco (como el menú desplegable Configuración del menú).

Actualizar

He notado que establecer la propiedadcolorControlNormal afecta el icono de filtro de la ruleta. Si alguien descubre cómo usar eso para Spinner (sin cambiar otros controles de contenido), entonces tendría mi solución combinando ese hallazgo con la respuesta de @Sven.

Actualizar

El siguiente cambio soluciona el problema para el texto de la flecha y el color emergente. Entonces, el único problema para la solución final es el icono de filtro.

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

Actualizar

Descubrí que el icono de filtro es en realidad una parte deandroid:background especificado para la ruleta y es transparente. Proporcionar un fondo propio lo solucionaría, p.

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

¡Misterio resuelto!

La última pieza del rompecabezas es la ventana emergente en Android 5 que tiene fondo negro y texto en blanco, pero supongo que se puede resolver con un diseño personalizado. Si nadie proporciona una respuesta completa, lo haré yo mismo y marcaré como aceptado.

Respuestas a la pregunta(15)

Su respuesta a la pregunta