web-dev-qa-db-fra.com

Comment personnaliser la couleur et le texte du mode Action?

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

22

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>
32
adneal

Solution pour mon application

<style name="AppTheme" parent="@Android:style/Theme.Holo.Light">
    <item name="Android:actionModeBackground">@color/bg_action_bar</item>
</style>
23
PleaseTwo

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>

10
Mina Dahesh

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>
4
Jacky Pham

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);
          }
       }
2
Nguyen Minh Binh

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.

2
Wu-Man

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.

1
Chantell Osejo

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.

https://Gist.github.com/coreform/36ed98f98668f2e90c6a

0
straya