Como posso corrigir o estilo do Spinner para Android 4.x colocado na parte superior da Barra de Ferramentas

De acordo comDocumentação do Android, O estilo Design de material é suportado para o widget Spinner.

Decidi usá-lo no meu aplicativo, colocando-o em cima da Barra de Ferramentas.

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 da atividade

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

No Lollipop, o botão giratório e o menu suspenso parecem bons, embora a cor do plano de fundo do menu suspenso seja preta em comparação com o menu suspenso, que é branco. eu acho queapp:popupTheme="@style/ThemeOverlay.AppCompat.Light" não é propagado para o girador.

Android 5.0

Agora, o grande problema está no Android 4.x, onde a cor do plano de fundo suspenso é branca (popupTheme propagated?) E o ícone ao lado do botão giratório é preto.

Android 4.4

Como posso configurá-lo corretamente no XML ou implementar no código para fazê-lo funcionar no Android 5 e 4? Idealmente, eu gostaria de ter as duas aparências no Android 5, mas com o menu suspenso giratório branco (como o menu suspenso Configuração).

Atualizar

Notei que a configuração de propriedadecolorControlNormal afeta o ícone do filtro giratório. Se alguém descobrir como fazer uso disso no Spinner (sem alterar outros controles de conteúdo), minha solução combinaria essa descoberta com a resposta @Sven.

Atualizar

A alteração a seguir corrige o problema do texto giratório e da cor pop-up. Portanto, o único problema da solução final é o ícone do 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);

Atualizar

Eu descobri que o ícone do filtro é realmente parte doandroid:background especificado para o girador e é transparente. Fornecer o próprio histórico o corrigia, por exemplo.

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

Mistério resolvido!

A última peça do quebra-cabeça é o pop-up no Android 5, com fundo preto e texto branco, mas acho que pode ser resolvido com layout personalizado. Se ninguém fornecer uma resposta completa, eu mesmo o farei e marcarei como aceito.

questionAnswers(15)

yourAnswerToTheQuestion