web-dev-qa-db-fra.com

Android Support Toolbar colorControlNormal color

Je voudrais définir ma couleur déroulante spinner sur blanc, tout en gardant les autres éléments de mon thème la couleur par défaut. Voici la situation:

Toolbar and spinner

<Android.support.v7.widget.Toolbar
        Android:layout_height="@dimen/action_bar_height"
        Android:layout_width="match_parent"
        Android:minHeight="?attr/actionBarSize"
        Android:background="?attr/colorPrimary"
        app:theme="@style/ToolbarTheme.Base"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light">

        <Spinner
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_centerVertical="true"/>

</Android.support.v7.widget.Toolbar>

Et le style est:

<!-- My base app theme -->
<style name="AppTheme.Base" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/primary</item>
    <item name="colorPrimaryDark">@color/primary_dark</item>
    <item name="colorAccent">@color/theme_tint</item>

    <!-- <item name="colorControlNormal">#FFFFFF</item> -->

    <item name="Android:windowNoTitle">true</item>
    <item name="windowActionBar">false</item>
    <item name="Android:typeface">sans</item>
    <item name="Android:windowBackground">@color/background_primary</item>
</style>

<!-- My Toolbar theme -->
<style name="ToolbarTheme.Base" parent="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
    <item name="colorControlNormal">#FFFFFF</item>
</style>

Si je devais mettre <item name="colorControlNormal">#FFFFFF</item> dans le thème de l'application (commenté ci-dessus), puis le menu déroulant du spinner deviendra blanc MAIS la case deviendra également blanche. Alors, comment puis-je obtenir que le spinner ne devienne blanc?

20
James Cross

Enfin, j'ai trouvé une solution sur la façon de changer la couleur de la flèche de Spinner en blanc.

1) Dans styles.xml, ajoutez le style suivant:

<style name="ActionBarThemeOverlay" parent="">
    <item name="Android:textColorPrimary">#ffffff</item>
    <item name="colorControlNormal">#ffffff</item>
    <item name="colorControlHighlight">#ff33b5e5</item>
</style>

<style name="Widget.MyTheme.HeaderBar.Spinner" parent="Widget.AppCompat.Light.Spinner.DropDown.ActionBar">
    <item name="Android:theme">@style/ActionBarThemeOverlay</item>
</style>

2) Dans la mise en page, où vous utilisez le Spinner (dans votre cas avec Toolbar), ajoutez le style à votre spinner:

<Spinner
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
         Android:id="@+id/my_spinner"
         style="@style/Widget.MyTheme.HeaderBar.Spinner"
         Android:layout_width="wrap_content"
         Android:layout_height="wrap_content" />
17
Yuriy Yunikov

Je suis juste tombé sur ces questions. Même si cela a été demandé il y a quelque temps, je voulais juste laisser une réponse qui devrait fonctionner:

Barre d'outils * .xml

<Android.support.v7.widget.Toolbar
    <!-- leave the theme stuff out of here -->
    style="@style/MyToolbarStyle"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content">

Styles/Thèmes

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- your other attributes -->
    <!-- following is used to tint the checkbox - purple for demo purpose -->
    <item name="colorControlNormal">#2196F3</item>
</style>

<style name="MyToolbarStyle">
    <item name="Android:minHeight">?actionBarSize</item>
    <item name="Android:background">?colorPrimary</item>
    <item name="popupTheme">@style/ThemeOverlay.AppCompat.Light</item>
    <item name="theme">@style/MyToolbarTheme</item>
</style>

<style name="MyToolbarTheme">
    <!-- Used to tint the back arrow, menu and spinner arrow -->
    <item name="colorControlNormal">#FFF</item>
</style>

Résultat

solution with different colors for spinner and checkbox

Remarque: j'ai rendu la case violette à des fins de démonstration

13
reVerse