Avec la barre d'outils AppCompat, je veux pouvoir changer la couleur de l'icône du menu de débordement lors du changement d'ActionMode.
Par exemple, l'icône de débordement sera blanche en mode normal de barre d'outils. Et deviendra noir sur ActionMode. Jusqu'à présent, j'ai réussi à changer l'arrière-plan du mode d'action ainsi que le texte du titre. Mais je n'ai pas encore trouvé de moyen de changer la couleur de l'icône du menu de débordement.
Je sais qu'une réponse est disponible: Changer l'icône de débordement du mode d'action
J'ai essayé la première solution et je n'ai pas pu trouver l'icône de débordement.
La deuxième solution, même avec un retard de 50L, fait clignoter l'icône du menu de débordement de la couleur voulue de l'ActionMode pendant une brève fraction de seconde qui est très choquante.
Ajoutez la ligne ci-dessous dans votre attribut de thème:
<item name="Android:textColorSecondary">@Android:color/white</item>
Ceci peut être réalisé en définissant le Android:textColorSecondary
attribut de thème.
Par exemple, supposons que vous ayez la barre d'outils suivante, qui utilise le thème MyToolbarStyle
:
<Android.support.v7.widget.Toolbar
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:id="@+id/main_toolbar"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:minHeight="?attr/actionBarSize"
theme="@style/MyToolbarStyle"
/>
Ensuite, définissez le style MyToolbarStyle
, héritant de ThemeOverlay.AppCompat.ActionBar
. Enfin, modifiez la couleur de l'icône de débordement en ajoutant un élément pour Android:textColorSecondary
:
<style name="MyToolbarStyle" parent="ThemeOverlay.AppCompat.ActionBar">
<item name="Android:textColorSecondary">#333333</item>
</style>
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
<item name="Android:actionOverflowButtonStyle">@style/ActionButton.Overflow.Icon</item>
</style>
<style name="ActionButton.Overflow.Icon" parent="Android:style/Widget.Holo.Light.ActionButton.Overflow">
<item name="Android:src">@mipmap/yourwanticon</item>
</style>
Ajoutez ce code sur votre res-> styles.xml
<style name="ToolbarColored" parent="AppTheme">
<item name="Android:textColorSecondary">YOUR_COLOR</item>
</style>
Ensuite, votre style "ToolbarColored" dans votre fichier XCML comme belove
<Android.support.v7.widget.Toolbar
Android:id="@+id/toolbar"
app:theme="@style/ToolbarColored"
Android:layout_width="match_parent"
Android:layout_height="?attr/actionBarSize"
Android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" />
<style name="AppTheme" parent="Theme.AppCompat.Light">
<item name="Android:actionOverflowButtonStyle">@style/ActionButtonOverflow</item>
<!-- Support library compatibility -->
<item name="actionOverflowButtonStyle">@style/ActionButtonOverflow</item>
</style>
<style name="ActionButtonOverflow" parent="@style/Widget.AppCompat.ActionButton.Overflow">
<item name="Android:tint">@color/brand_white</item>
</style>
Pour modifier correctement la couleur de l'icône du menu de débordement de votre barre d'outils, définissez le thème de votre barre d'outils sur un thème ActionBar sombre AppCompat. Par exemple:
Dans votre fichier res/values / style.xml, créez un thème qui hérite d'AppCompat de cette manière:
<style name="AppTheme.MyThemeName" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />
Définissez maintenant le thème de votre barre d'outils sur ce thème:
<Android.support.v7.widget.Toolbar
Android:id="+id/my_toolbar_id
Android:layout_width="match_parent"
Android:layout_height="@dimen/my_toolbar_height"
Android:theme="@style/AppTheme.MyThemeName">
</Android.support.v7.widget.Toolbar>
Si vous utilisez la barre d'outils dans votre xml d'activité, vous pouvez utiliser quelque chose comme ceci
toolbar?.navigationIcon?.setColorFilter(ContextCompat.getColor(this, Android.R.color.black), PorterDuff.Mode.SRC_ATOP)
Créez d'abord votre style personnalisé
<style name="ToolbarColoredBackArrow" parent="AppTheme">
<item name="Android:textColorSecondary">@color/white</item>
</style>
Ensuite, ajoutez-le simplement dans votre barre d'outils
<Android.support.v7.widget.Toolbar
Android:id="@+id/toolbar"
Android:layout_width="match_parent"
Android:titleTextColor="@color/white"
app:theme="@style/ToolbarColoredBackArrow"
Android:layout_height="?attr/actionBarSize"
app:layout_scrollFlags="scroll|enterAlways"
Android:background="?attr/colorPrimary" />
<style name="ToolBarTheme" parent="ThemeOverlay.AppCompat.ActionBar">
<item name="Android:tint">@color/colorAccent</item>
créez la teinte theme.set ci-dessus avec votre couleur et ajoutez ce thème à la barre d'outils.
<androidx.appcompat.widget.Toolbar
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:minHeight="?attr/actionBarSize"
Android:theme="@style/ToolBarTheme"/>
Si vous voulez que l'icône du menu de débordement blanc, ajoutez simplement Android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
à votre code de disposition de la barre d'outils.
Si vous voulez que l'icône du menu de débordement sombre, utilisez Android:theme="@style/Base.Widget.AppCompat.Light.PopupMenu"
Le code final est donc quelque chose comme:
<Android.support.v7.widget.Toolbar
Android:id="@+id/a_main_tb"
Android:layout_width="match_parent"
Android:layout_height="?actionBarSize"
Android:background="@color/colorPrimary"
Android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:title="@string/app_name"
app:titleTextColor="#ffffff"
/>
Vous devez également comprendre que cela changera également la couleur des éléments du menu.