J'essaie de mettre un spinner dans mon Toolbar
comme l'ancienne navigation de style ActionBar et mon thème est le suivant
<style name="AppBaseTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/color_primary</item>
<item name="colorPrimaryDark">@color/color_primary_dark</item>
<item name="colorAccent">@color/color_primary</item>
</style>
mais mon spinner est noir tandis que toutes les autres icônes et menus de débordement sont blancs donc ça a l'air mauvais
J'ai essayé de changer le style du spinner en utilisant ceci
<style name="ToolbarSpinnerTheme" parent="Theme.AppCompat">
<item name="Android:spinnerItemStyle">@style/TextAppearanceSpinnerItem</item>
</style>
<style name="TextAppearanceSpinnerItem">
<item name="Android:textColor">#FFFFFF</item>
</style>
voici comment ma barre d'outils est stylée
<Android.support.v7.widget.Toolbar
Android:id="@+id/toolbar"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:minHeight="?attr/actionBarSize"
Android:background="?attr/colorPrimary"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light">
<Spinner
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:id="@+id/modes"
Android:minWidth="150dp"
Android:gravity="bottom"
style="@style/ToolbarSpinnerTheme"/>
</Android.support.v7.widget.Toolbar>
final Spinner mode = (Spinner)findViewById(R.id.modes);
SpinnerAdapter mSpinner = ArrayAdapter.createFromResource(this, R.array.action_bar_spinner, Android.R.layout.simple_spinner_dropdown_item);
mode.setAdapter(mSpinner);
mais il reste toujours noir. Comment puis-je changer la flèche et le texte du spinner en blanc tout en conservant le même thème pour le style déroulant que vous obtiendriez avec le thème Light
?
Correction de la flèche de mise à jour 4.4:
Le seul moyen pour que la flèche devienne blanche est d'ajouter le spinner par programme et non en xml pour qu'il ressemble à ceci
final ArrayAdapter spinnerAdapter = ArrayAdapter.createFromResource(getSupportActionBar().getThemedContext(),
R.array.main_navigation_list, R.layout.spinner_text);
spinnerAdapter.setDropDownViewResource(R.layout.spinner_dropdown_item);
mNavigationTags = getResources().getStringArray(R.array.main_navigation_list);
mNavigationSpinner = new Spinner(getSupportActionBar().getThemedContext());
mNavigationSpinner.setAdapter(spinnerAdapter);
mNavigationSpinner.setOnItemSelectedListener(this);
mToolbar.addView(mNavigationSpinner)
Lorsque vous créez le arrayadapter, vous devez faire getApplicationContext au lieu de ceci:
SpinnerAdapter mSpinner = ArrayAdapter.createFromResource(getApplicationContext(), R.array. action_bar_spinner, Android.R.layout.simple_spinner_dropdown_item);
Créez un nouveau fichier de mise en page:
<CheckedTextView xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@Android:id/text1"
style="?android:attr/spinnerDropDownItemStyle"
Android:singleLine="true"
Android:layout_width="match_parent"
Android:layout_height="?android:attr/listPreferredItemHeight"
Android:ellipsize="Marquee"
Android:textColor="#000000"/>
Modifiez ensuite votre code en ceci:
ArrayAdapter mAdapter = ArrayAdapter.createFromResource(getApplicationContext(), R.array. action_bar_spinner, Android.R.layout.simple_spinner_dropdown_item);
mAdapter.setDropDownViewResource(R.layout.spinner_dropdown_item);
mode.setAdapter(mAdapter);
Avez-vous essayé de mettre le spinner dans le fichier xml comme ceci:
<Android.support.v7.widget.Toolbar
Android:id="@+id/toolbar"
Android:layout_height="?attr/actionBarSize"
Android:layout_width="match_parent"
Android:background="?attr/colorPrimary">
<Spinner
Android:id="@+id/spinner_nav"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content" />
</Android.support.v7.widget.Toolbar>
Et désactivez également le titre comme ceci:
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayShowTitleEnabled(false);
La réponse est de Chris Banes: https://stackoverflow.com/a/26511653/27677
Kevin est dans la bonne direction, mais la vraie réponse n'est pas d'utiliser le contexte de l'application mais le contexte déjà thématique de la barre d'action elle-même. Ceci est en fait mentionné dans la documentation mais il n'obtient pas autant d'importance tout au long:
Lorsque vous gonflez quelque chose à afficher dans la barre d'actions (tel qu'un adaptateur Spinner pour la navigation dans la liste dans la barre d'outils), assurez-vous d'utiliser le contexte thématique de la barre d'actions, récupéré via getSupportActionBar (). GetThemedContext ().