webentwicklung-frage-antwort-db.com.de

Kontextuelle Actionbar-Stile

Ich suche nach Stilinformationen in der kontextabhängigen Aktionsleiste (CAB). Ich muss nur die Farbe des Textes ändern.

Result of contextual actionbar

Wie Sie oben sehen können, wird hier das Standardthema Theme.Holo.Light.DarkActionBar verwendet. Ich muss nur die Textfarbe auf Weiß setzen!

Kann mir jemand die richtige Richtung zeigen?

23
Eurig Jones

Ich habe einen Kommentar zu meiner eigenen Frage gepostet, und dies ist eigentlich ein Fehler in der Android-Version, die ich verwendete (wahrscheinlich eine frühe Version von 4.0).

Dies ist der beschriebene Fehler: http://code.google.com/p/Android/issues/detail?id=26008

4
Eurig Jones

So ändern Sie die Farbe/etc des Texts in einer kontextabhängigen Aktionsleiste:

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

dabei enthält layout/contextual_title.xml ein einzelnes TextView mit der gewünschten Farbe/Größe/Art usw

Tatsächlich kann fast alles in einer kontextabhängigen Aktionsleiste gestaltet werden. Das einzige Problem ist, dass die Suche nach dem Wort 'kontextabhängig' nirgendwo nützlich ist. Die relevanten Styling-Funktionen werden alle als "actionMode ..." bezeichnet. Hier sind einige, die ich verwendet habe (in meinem Theme definiert).

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

Sie können ganz einfach Ihre eigenen Textbearbeitungselemente zum Ausschneiden/Einfügen/Kopieren/Auswählen aller Symbole, den Hintergrund der Leiste Und den Hintergrund des Symbols einstellen, der die Farbe ändert, wenn Sie auf die Symbole drücken (bar_selector oben). Die Symbole sind ImageViews, keine Schaltflächen, und die Bearbeitungs-IDs (und der druckbare Hintergrund) werden an das übergeordnete ImageView-Element (ein übergeordnetes Element pro Ansicht) angehängt, bei dem es sich um einen internen Typ handelt.

Es ist nie klar, was in den Stile wohin geht - ich habe herausgefunden, wo sich selectableItemBackground in der Plattform Themes.xml befand, und das Zeichenobjekt kopiert und modifiziert.

51
hexatron

Wenn Sie den kontextabhängigen Aktionsmodus manuell starten, können Sie setTheme () mit einem neuen Thema aufrufen, bevor Sie es starten (möglicherweise Theme.AppCompat.Light.DarkActionBar, wenn Sie versuchen, das Problem mit dem schwarzen Text auf Schwarz zu vermeiden). Wenn Sie die Inhaltsansicht der Aktivität bereits festgelegt haben, hat dies keinen Einfluss auf das Thema der aktuellen Aktivität.

@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

es funktioniert jetzt, aber Sie müssen es in values ​​/ styles.xml eingeben (nicht values-v #/styles.xml) und im allgemeinen (nicht API-spezifisches Tag).

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