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.