Le mode d'action par défaut (version 3.0 et supérieure) comporte un thème vert et un bouton "Terminé" sur le côté gauche. Comment puis-je les personnaliser?
Merci
C'est le style utilisé pour n'importe quel ActionMode, je l'ai extrait du SDK. Vous aurez besoin de créer votre propre style pour le personnaliser. C'est vraiment facile à faire. Si vous n'avez jamais rien fait de tel auparavant, vous devriez lire cet article sur la personnalisation de la barre d'actions. Cela explique tout ce que vous devez savoir.
<style name="Widget.ActionMode">
<item name="Android:background">?android:attr/actionModeBackground</item>
<item name="Android:backgroundSplit">?android:attr/actionModeSplitBackground</item>
<item name="Android:height">?android:attr/actionBarSize</item>
<item name="Android:titleTextStyle">@Android:style/TextAppearance.Widget.ActionMode.Title</item>
<item name="Android:subtitleTextStyle">@Android:style/TextAppearance.Widget.ActionMode.Subtitle</item>
</style>
Solution pour mon application
<style name="AppTheme" parent="@Android:style/Theme.Holo.Light">
<item name="Android:actionModeBackground">@color/bg_action_bar</item>
</style>
avec ce code, vous pouvez changer la couleur de fond du mode Action et changer l'image DONE. Remarque: vous pouvez aussi ajouter votre texte dans votre image! dans res/styles.xml:
<style name="AppTheme" parent="Android:Theme.Holo">
<item name="Android:actionModeBackground">@Android:color/white</item>
<item name="Android:actionModeCloseDrawable">@drawable/plus</item>
Travaillé sur mon projet
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="actionModeStyle">@style/CustomActionModeStyle</item>
</style>
Style ActionMode personnalisé
<style name="CustomActionModeStyle" parent="Base.Widget.AppCompat.ActionMode">
<item name="background">@color/color_primary</item>
<item name="titleTextStyle">@style/CustomeActionModeTextStyle</item>
</style>
Titre personnalisé ActionMode
<style name="CustomeActionModeTextStyle" parent="TextAppearance.AppCompat.Widget.ActionMode.Title">
<item name="Android:textSize">16sp</item>
<item name="Android:textColor">@color/color_primaryText</item>
</style>
Voici mon approche avec le code Java:
private void customizeActionModeCloseButton(String title, int iconID) {
int buttonId = Resources.getSystem().getIdentifier("action_mode_close_button", "id", "Android");
View v = findViewById(buttonId);
if (v == null) {
buttonId = R.id.abs__action_mode_close_button;
v = findViewById(buttonId);
}
if (v == null)
return;
LinearLayout ll = (LinearLayout) v;
if (ll.getChildCount() > 1 && ll.getChildAt(1) != null) {
//custom icon
ImageView img = (ImageView) ll.getChildAt(0);
img.setImageResource(iconID);
//custom text
TextView tv = (TextView) ll.getChildAt(1);
tv.setText(title);
tv.setTextColor(Color.WHITE);
}
}
Vous ne pouvez pas vraiment le personnaliser de cette façon car l'attribut actionModeStyle est introduit au niveau 14 de l'API. Pour les niveaux 11 à 13, vous n'avez pas de chance.
Pour le niveau 14 de l'API, vous pouvez modifier le style en définissant Android: actionModeStyle dans votre thème.
Réponse mise à jour pour les appareils pré et post-Lollipop. Vous devez supprimer le préfixe Android: pour qu'il fonctionne sur les appareils Lollipop +, comme suit:
styles.xml:
<style name="Widget.ActionMode">
<item name="Android:background">?android:attr/actionModeBackground</item>
<item name="Android:backgroundSplit">?android:attr/actionModeSplitBackground</item>
<item name="Android:height">?android:attr/actionBarSize</item>
<item name="Android:titleTextStyle">@Android:style/TextAppearance.Widget.ActionMode.Title</item>
<item name="Android:subtitleTextStyle">@Android:style/TextAppearance.Widget.ActionMode.Subtitle</item>
</style>
v21/styles.xml:
<style name="Widget.ActionMode">
<item name="background">?android:attr/actionModeBackground</item>
<item name="backgroundSplit">?android:attr/actionModeSplitBackground</item>
<item name="height">?android:attr/actionBarSize</item>
<item name="titleTextStyle">@Android:style/TextAppearance.Widget.ActionMode.Title</item>
<item name="subtitleTextStyle">@Android:style/TextAppearance.Widget.ActionMode.Subtitle</item>
</style>
Je vous recommanderais également d'avoir votre style avec parent="@style/Widget.AppCompat.ActionMode"
set, afin que vous héritiez des attributs que vous ne vous souciez pas de remplacer.
Voici une solution AppCompat (en utilisant startSupportActionMode) pour personnaliser temporairement (personnaliser) l’image du bouton CAB terminé. Temporairement, car il est souhaitable de revenir à l’utilisation de son image habituelle afin que, lorsque la sélection de texte se déclenche, elle apparaisse appropriée.