2012-09-28 9 views
11

Ich sehe, um die Textfarbe der Aktion Modus "done"/"close" -Button einzustellen. Das habe ich ausprobiert:Aktionsmodus schließen Taste Textfarbe

<item name="android:actionModeCloseButtonStyle">@style/ActionModeCloseButton</item> 
.... 
<style name="ActionModeCloseButton" parent="android:style/Widget.Holo.ActionButton.CloseMode"> 
    <item name="android:textColor">@android:color/white</item> 
</style> 

aber hat keine Wirkung.

enter image description here

Beachten Sie, dass auf JB, es ist genug, dass ich die ActionModeCloseButton Stil der Eltern die regelmäßige Holo Thema machen. Es funktioniert gut (ohne die textColor Einstellung sogar).

Irgendwelche Ideen? Danke.

Antwort

6

Zunächst ist die Textansicht "Done" nur auf großen Geräten sichtbar. Checkout in der Android-Quelle. Die android:actionModeCloseButtonStyle gilt also nur für die enthaltene Ansicht und nicht die Bildansicht und die Textansicht.

Glücklicherweise verwendeten die Android-Ingenieure öffentlich zugängliche Attribute, um die Kindansichten zu formatieren.

  • Verwenden Sie android:actionMenuTextColor, um zu textColor der TextView zu ändern.
  • Verwenden android:actionModeCloseDrawable, um die ziehbar des

Beispiel Image zu ändern:

<style name="MyTheme"> 
    <item name="android:actionMenuTextColor">#ff000000</item> 
    <item name="android:actionModeCloseDrawable">@drawable/my_close_drawable</item> 
</style> 

Nachfolgend finden Sie eine Kopie der im layout-large -Ordner, wo man sehen kann, wie das Layout bauen ist.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/action_mode_close_button" 
     android:focusable="true" 
     android:clickable="true" 
     android:paddingStart="8dip" 
     style="?android:attr/actionModeCloseButtonStyle" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_marginEnd="16dip"> 
    <ImageView android:layout_width="48dip" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center" 
       android:scaleType="center" 
       android:src="?android:attr/actionModeCloseDrawable" /> 
    <TextView android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center" 
       android:layout_marginStart="4dip" 
       android:layout_marginEnd="16dip" 
       android:textAppearance="?android:attr/textAppearanceSmall" 
       android:textColor="?android:attr/actionMenuTextColor" 
       android:textSize="12sp" 
       android:textAllCaps="true" 
       android:text="@string/action_mode_done" /> 
</LinearLayout> 
+0

Das Problem mit actionMenuTextColor ist, dass es auch die Farbe für die "normalen" Aktionsleiste Elemente ändert. – sergio91pt

+0

Dies funktioniert nicht, weil das richtige Element zu ändern ist "abs__action_mode_close_item.xml" und nicht "abs__action_menu_item_layout.xml". Problem ist, dass "abs__action_mode_close_item.xml" keine Textfarbe bietet :(Sie könnten es leicht für ABS reparieren, aber das funktioniert nur für Androids vor 4.0. Sorry, dies zu sagen ... – Trinimon

0

Da das Layout für die Action-Modus Schließen-Schaltfläche wird für die Textansicht, die ein Farbattribut nicht schaffen, gibt es keine Möglichkeit, diese Farbe in einem benutzerdefinierten Thema zu setzen. Statt die einzigen ay ich fand, war die Textfarbe in der onPrepareActionMode() Methode meiner abgeleiteten ActionMode Klasse zu überschreiben:

@Override 
public boolean onPrepareActionMode(ActionMode mode, Menu menu) { 
    new AsyncTask<Void, Void, Void>() { 
     @Override 
     protected Void doInBackground(Void... none) { 
      try { 
       Thread.sleep(100); 
      } catch (InterruptedException e) { 
      } 
      return null; 
     } 

     @Override 
     protected void onPostExecute(Void none) { 
      if (activity != null) { 
       LinearLayout layout = (LinearLayout) activity 
          .findViewById(R.id.abs__action_mode_close_button); 

       if (layout == null) { 
        int id = Resources.getSystem().getIdentifier(
             "action_mode_close_button", "id", "android"); 
        layout = (LinearLayout) activity.findViewById(id); 
       } 

       if (layout != null && layout.getChildCount() > 1) { 
        TextView label = (TextView) layout.getChildAt(1); 
        if (label != null) label.setTextColor(Color.RED); 
       } 
      } 
     } 
    }.execute(); 

    return false; 
} 

Arbeitete mit zwei Geräten vor und nach Android 4.0.

+0

Vorsicht, wenn eine Android-Version nicht funktioniert Wenn Sie keinen TextView an Position 1 haben, wird Ihr Code auf diesem Gerät explodieren. Ich würde eine Instanz machen. – MinceMan

Verwandte Themen