2013-06-13 18 views
15

Ich bin bewusst, android:actionModeBackground, die in XML-Themen verwendet werden können.ActionMode Hintergrund programmgesteuert festlegen

Gibt es eine Möglichkeit, diesen Hintergrund im Code zu setzen?

Grundsätzlich muss ich die ActionMode equavalent von

getActionBar().setBackgroundDrawable(drawable); 
+0

Die Verwendung von Reflektion würde wahrscheinlich funktionieren, aber es bedeutet, dass man sich die Hände schmutzig macht mit Dingen, die man eigentlich nicht anfassen sollte. Außerdem gibt es keine Garantie für die Vorwärts- und/oder Rückwärtskompatibilität für eine solche Lösung. Wie auch immer, nur ein Gedanke. –

+0

Sie können die Antwort in dieser Frage finden: http://stackoverflow.com/questions/6556116/how-can-i-customize-the-action-modes-color-and-text –

+0

Sie müssen Reflexion benutzen. [Wie Hintergrund des ActionMode der ActionBar zu animieren?] (Http://stackoverflow.com/questions/23457709/how-to-animate-background-of-actionmode-of-the-actionbar) – adneal

Antwort

0

Sie können die ActionMode-ID erhalten, indem diese action_context_bar mit

int amId = getResources().getIdentifier("action_context_bar", "id", "android"); 
    View view= findViewById(amId); 
    view.setBackground(actionModeBackground); 
+1

das gibt mir eine Nullpointerexzeption –

+0

ich 2 - ich habe Nullpointerexzeption – Colateral

0

ich mit Reflexion Hilfe herausgefunden. Weil ich habe nicht eine ActionBar

public static void setActionModeBackgroundColor(ActionMode actionMode, int color) { 
     try { 
      StandaloneActionMode standaloneActionMode = (StandaloneActionMode) actionMode; 
      Field mContextView = StandaloneActionMode.class.getDeclaredField("mContextView"); 
      mContextView.setAccessible(true); 
      Object value = mContextView.get(standaloneActionMode); 
      ((View) value).setBackground(new ColorDrawable(color)); 
     } catch (Throwable ignore) { 
     } 
    } 

Auch gibt es zwei Implementierungen von ActionMode: StandaloneActionMode und ActionModeImpl. Dieses Beispiel nur für den Ersten. Für die zweite wird es gleich

Verwandte Themen