web-dev-qa-db-fra.com

Comment changer la couleur de fond d'ActionMode dans Android

je crée une application Android dans laquelle le niveau de support api est 7, donc j'utilise sherlock Actionbar J'utilise le mode d'action dedans ..___ Le problème est que je veux changer l'arrière-plan du mode d'action. Donc j'ai essayé 

    <item name="Android:background">@color/something</item>
    <item name="Android:backgroundStacked">@color/something</item>
    <item name="Android:backgroundSplit">@color/something</item>

ces solutions de style sont disponibles mais aucune d'entre elles ne fonctionne. http://i43.tinypic.com/2nriic1.png

16
Love Garg

si vous voulez changer la couleur de ActionBar, procédez comme suit:

 ActionBar bar = getActionBar();
 bar.setBackgroundDrawable(new ColorDrawable("COLOR"));

voir le lien suivant link pour plus d'informations

et si vous utilisez ActionMode C'est le style utilisé pour tout ActionMode. Vous devrez créer votre propre style pour le personnaliser

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

plus d'infos dans ce site

voir ceci aussi

Modifier

pour pré-Honeycomb voir ceci s'il vous plaît

peut-être ceci ou ceci vous a aidé

16
Shayan Pourvatan

Dans mon cas, j'ai résolu avec cela. J'ai d'abord créé un style pour définir l'actionModeBackground:

<style name="MyTheme.ActionMode" parent="@Android:style/Theme.Holo.Light">
    <item name="Android:actionModeBackground">#FFFFFF</item>
</style>

Ensuite, j'ajoute le style à mon thème d'application de base:

<style name="AppTheme" parent="AppBaseTheme">
    <item name="Android:actionModeStyle">@style/MyTheme.ActionMode</item>
</style>

J'espère que ça aide!!!

29
Kokusho

Si vous utilisez simple Action Bar alors essayez ceci, 

ActionBar abar = getActionBar();
abar.setBackgroundDrawable(new ColorDrawable(0xff123456));

Mais si vous utilisez Actionbar share lock lock Lib alors essayez ceci 

getSupportActionBar().setBackgroundDrawable(new ColorDrawable(0xff123456));

ColorDrawable(0xff123456) - devrait être votre code de couleur.

Drawable/styles.xml 

 <item name="Android:actionModeBackground">@drawable/actionbar_background</item>
 <item name="actionModeBackground">@drawable/actionbar_background</item>

Changer de thème selon le niveau de l'API 

Si vous voulez changer selon le niveau de l'API, vous devriez alors choisir this

15
Chintan Khetiya

Si vous voulez le faire par programme (prenant en charge AppCompat), vous devez rechercher une vue parent icône. Ce code est testé de 2.3.7 à 6.0.1. Vous devez vérifier les API inférieures ....

commencez par obtenir votre vue de décor d'activité  

final ViewGroup  decorView = (ViewGroup) getActivity().getWindow().getDecorView();

seconde définit la couleur dans onPrepareActionMode. Vous pouvez également définir l’icône de retour ou d’autres éléments ici

@Override
public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) 
{

     decorView.postDelayed(new Runnable() {

     @Override
     public void run() 
     {
        int buttonId = getResources().getIdentifier("action_mode_close_button", "id", "Android");

        View v = decorView.findViewById(buttonId);
        if (v == null)
        {
           buttonId = R.id.action_mode_close_button;
            v = decorView.findViewById(buttonId);   
        }

        if (v != null)
        {                         
           ((View)v.getParent()).setBackgroundColor(Color.red /*your color here*/);
        }               
     }   
     }, 500);}
3
Colateral

Remplacez ce style dans votre thème personnalisé:

<style name="Base.Widget.AppCompat.ActionMode" parent="">
    <item name="background">?attr/actionModeBackground</item>
    <item name="backgroundSplit">?attr/actionModeSplitBackground</item>
    <item name="height">?attr/actionBarSize</item>
    <item name="titleTextStyle">@style/TextAppearance.AppCompat.Widget.ActionMode.Title</item>
    <item name="subtitleTextStyle">@style/TextAppearance.AppCompat.Widget.ActionMode.Subtitle</item>
    <item name="closeItemLayout">@layout/abc_action_mode_close_item_material</item>
</style>

Par exemple:

<style name="LywActionMode" parent="Base.Widget.AppCompat.ActionMode">
    <item name="background">@color/lyw_primary_color</item>
    <item name="backgroundSplit">@color/lyw_primary_color</item>
</style>

<style name="LywCompatTheme" parent="@style/Theme.AppCompat.Light">
    ...
    <item name="actionModeStyle">@style/LywActionMode</item>
</style>
2

Le moyen le plus simple de le faire

ActionBarContextView actionBar = getWindow().getDecorView().findViewById(R.id.action_mode_bar);
    actionBar.setBackgroundColor(WhateverColorYouWant);
1
Eugene Sianko

C'est le style utilisé pour n'importe quel ActionMode, je l'ai extrait du SDK. Vous devrez 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>
1
M D

Pour ceux qui éprouvent encore des difficultés et qu'aucune des solutions existantes ne résout, assurez-vous que, dans votre présentation avec la barre d'outils, vous avez ceci:

app:popupTheme="@style/Theme.ToolBar"
Android:popupTheme="@style/Theme.ToolBar"

et vous n'avez pas 

app:theme="@style/Theme.ToolBar"

Car ils vont créer un conflit et votre personnalisation ne fonctionnera pas.

0
Roger Alien

Je veux rendre plus claire cette réponse. Créez d'abord un arrière-plan personnalisé "storage_list_header_shape.xml" dans votre dossier pouvant être dessiné.

<?xml version="1.0" encoding="utf-8"?>
  <shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
     Android:shape="rectangle" >

   <gradient
      Android:angle="270"
      Android:startColor="@Android:color/holo_orange_light"
      Android:centerColor="@Android:color/holo_orange_dark"
      Android:endColor="@Android:color/holo_orange_light" />

   <size Android:height="3dp" />

 </shape>

Deuxièmement, créez un style personnalisé dans votre style.xml

<style name="customActionModeTheme" parent="@Android:style/Theme.Holo.Light">
    <item name="Android:actionModeBackground">@drawable/storage_list_header_shape</item>
</style>

Troisièmement, appelez le style dans votre manifeste.

<activity
     Android:name="com.javacafe.activities.Main"
     Android:launchMode="singleTop"
     Android:screenOrientation="sensorLandscape"
     Android:theme="@style/customActionModeTheme" >
</activity>
0
nAkhmedov