web-dev-qa-db-fra.com

Styles de barre d'action contextuelle

Je recherche des informations sur le style dans la barre d’action contextuelle (CAB). J'ai juste besoin de changer la couleur du texte en fait ..

Result of contextual actionbar

Comme vous pouvez le voir ci-dessus, il utilise le standard Theme.Holo.Light.DarkActionBar theme;

Est-ce que quelqu'un peut-il me montrer la bonne direction?

23
Eurig Jones

J'ai posté un commentaire sur ma propre question, et il s'agit en fait d'un bogue dans la version d'Android que j'utilisais (Probablement une version antérieure de 4.0)

C'est le bogue décrit: http://code.google.com/p/Android/issues/detail?id=26008

4
Eurig Jones

Pour changer la couleur/etc du texte dans une barre d’actions contextuelle:

public boolean onCreateActionMode(ActionMode mode, Menu menu) {
  //mode.setTitle("Contextual Action Bar"); (replace this call)
  TextView tv= (TextView)getLayoutInflater().inflate(R.layout.contextual_title, null);
  tv.setText("Contextual Action Bar");
  mode.setCustomView(tv);

où layout/contextual_title.xml contient un seul TextView avec la couleur/taille/style de votre choix, etc.

En fait, presque tout dans une barre d’action contextuelle peut être appelé. Le seul problème est que la recherche du mot «contextuel» ne mène nulle part. Les caractéristiques de style pertinentes sont toutes appelées "actionMode ...". Voici quelques-uns que j'ai utilisés (définis dans mon thème.)

<item name="Android:actionModeCloseDrawable">@drawable/check</item>
<item name="Android:actionModeCutDrawable">@drawable/ic_menu_cut_holo_dark</item>
<item name="Android:actionModeCopyDrawable">@drawable/ic_menu_copy_holo_dark</item>
<item name="Android:actionModePasteDrawable">@drawable/ic_menu_paste_holo_dark</item>
<item name="Android:actionModeSelectAllDrawable">@drawable/ic_menu_selectall_holo_dark</item>
<item name="Android:actionModeBackground">@drawable/contextual</item>
<item name="Android:actionModeCloseButtonStyle">@style/MyCloseButton</item>

<!-- these change the press backgrounds for the Vanilla actionBar and for search -->
<item name="Android:windowContentOverlay">@null</item>
<item name="Android:selectableItemBackground">@drawable/bar_selector</item>
<item name="Android:actionBarItemBackground">@drawable/bar_selector</item>      

<!-- these were defined in platform/.../data/res/values/... but Eclipse didn't recognize them -->
<!--? item name="Android:actionModeShareDrawable">@drawable/icon</item -->
<!--? item name="Android:actionModeFindDrawable">@drawable/icon</item -->
<!--? item name="Android:actionModeWebSearchDrawable">@drawable/icon</item -->
<!-- item name="Android:actionModeBackground">@drawable/red</item -->

<!-- and finally -->
<style name="MyCloseButton" parent="Android:style/Widget.ActionButton.CloseMode">
    <item name="Android:background">@drawable/bar_selector</item>
</style>

Vous pouvez facilement définir vos propres icônes couper/coller/copier/sélectionner toutes les éditions de texte, l’arrière-plan de la barre Et l’arrière-plan de l’icône qui change de couleur lorsque vous appuyez sur les icônes (sélecteur de barres ci-dessus). Les icônes sont ImageViews, pas des boutons, et les id d'édition (et l'arrière-plan pouvant être pressé) sont attachés au parent de ImageView (un parent par vue), qui est un type "interne".

On ne sait jamais ce qui se passe où dans les styles - j'ai trouvé où se trouvait selectableItemBackground dans la plate-forme Themes.xml et copié et modifié le dessin que l'on pouvait pointer.

51
hexatron

Si vous démarrez le mode d'action contextuelle manuellement, vous pouvez appeler setTheme () avec un nouveau thème avant de le lancer (par exemple, Theme.AppCompat.Light.DarkActionBar si vous essayez d'éviter le problème du texte noir sur noir). Cela n'affectera pas le thème de l'activité en cours si vous avez déjà défini la vue du contenu de l'activité.

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.my_activity_layout);

    // these lines can occur anywhere so long as you've already 
    // called "setContentView()" on the activity. The theme
    // you set here will apply to the action mode, but not to 
    // the activity.
    setTheme(R.style.Theme_AppCompat_Light_DarkActionBar);
    startSupportActionMode(myActionModeCallback);

}
0
mikejonesguy

cela fonctionne maintenant, mais vous devez le saisir dans values ​​/ styles.xml (pas avec values-v #/styles.xml) et le saisir dans le code général (balise non spécifique à l'API)

<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
    <item name="Android:actionModeCloseDrawable">@drawable/ic_launcher</item>
    <!-- All customizations that are NOT specific to a particular API-level can go here. -->
</style>
0
user1876617