2012-09-28 10 views
11

Veo para establecer el color del texto del modo de acción "hecho"/"cerrar" el botón. Esto es lo que he intentado:Modo de acción cerrar botón color de texto

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

pero no tiene ningún efecto.

enter image description here

Tenga en cuenta que en JB, es suficiente con que hago los padres del estilo ActionModeCloseButton el tema Holo regulares. Funciona bien allí (sin la configuración textColor par).

¿Alguna idea? Gracias.

Respuesta

6

En primer lugar, la vista de texto "Hecho" solo está visible en dispositivos grandes. Pago en la fuente de Android. Por lo tanto, android:actionModeCloseButtonStyle solo se aplica a la vista que contiene y no a la vista de la imagen ni a la vista de texto.

Afortunadamente, los ingenieros de Android usaron atributos de acceso público para aplicar estilos a las vistas de niños.

  • Usa android:actionMenuTextColor para cambiar al textoColor del TextView.
  • Uso android:actionModeCloseDrawable para cambiar el dibujable del Ejemplo ImageView

:

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

A continuación se muestra una copia del en el -folder layout-large donde se puede ver cómo el diseño es construir.

<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

El problema con actionMenuTextColor es que también cambiará el color de los elementos de la barra de acción "normal". – sergio91pt

+0

Esto no funciona porque el elemento correcto para cambiar es 'abs__action_mode_close_item.xml' y no' abs__action_menu_item_layout.xml'. El problema es que 'abs__action_mode_close_item.xml' no proporciona un color de texto :(puedes arreglarlo fácilmente para ABS, pero eso solo funciona para los androides anteriores a 4.0. Lamento decir esto ... – Trinimon

0

Desde el diseño para el botón de cerrar el modo de acción no proporciona un atributo de color para la vista de texto, no hay manera de establecer este color en un tema personalizado. En cambio el único que encontré fue ay para sobrescribir el color del texto en el método de mi clase derivada ActionModeonPrepareActionMode():

@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; 
} 

trabajó con dos dispositivos de pre y post Android 4.0.

+0

Cuidado, si una versión de android doesn No tengo una vista de texto en la posición 1, su código explotará en ese dispositivo. Haría una instancia de verificación de eso antes de transmitirlo. – MinceMan

Cuestiones relacionadas