2011-12-22 20 views
6

En mi aplicación Android estoy personalizando el ActionBar siguiendo los consejos del android developer blog y otros lugares. Me gustaría poder resaltar un elemento de menú específico en ActionBar, p. con un color de fondo diferente porque es especialmente aplicable a un fragmento actualmente visible (que en realidad lo agregó). Sin embargo, no he encontrado ninguna indicación de que esto pueda hacerse ni lo he logrado todavía. ¿Es posible? ¿Si es así, cómo?Aspecto/estilo diferente para el elemento de menú específico en ActionBar

+0

¿Estás seguro de que no sería más fácil usar un ícono ligeramente diferente? ¿O otros cambios en primer plano que podría realizar a través de su propia vista de acción inflada personalizada o 'ActionProvider'? – CommonsWare

+0

actualmente estos son texto y un ícono sería más difícil de entender. En términos de la vista de acción personalizada o ActionProvider ... tendré que investigar eso. –

+0

Puede cambiar el color de primer plano del texto, al menos si va a la vista de acción/ruta 'ActionProvider'. Desafortunadamente, Android no es compatible con la etiqueta '' ... :-) – CommonsWare

Respuesta

12

Así que esto lo hice funcionar con un truco. Aquí va el código fragmento

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
    super.onCreateOptionsMenu(menu, inflater); 

    menuItemCreateCart = menu.findItem(R.id.menuItemCreateCart); 
    if (menuItemCreateCart == null) { 
     menuItemCreateCart = menu.add(0, R.id.menuItemCreateCart, 0, R.string.Create); 
    } 

    TextView tv = new TextView(getActivity()); 
    tv.setText(R.string.Create); 
    tv.setTextColor(getResources().getColor(R.color.green)); 
    tv.setBackgroundColor(getResources().getColor(R.color.lightBlue)); 
    tv.setOnClickListener(
      new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        createCart(); 
       } 
      } 
    ); 
    menuItemCreateCart.setActionView(tv); 

El Gotcha principal es que el OnClickListener tiene que ser establecido en la idea de que haya establecido como acción de la vista y no el elemento de menú para que funcione. De esta forma puedes hacer lo que quieras.

También tenga en cuenta que NO puede usar getActionView para recuperar la vista establecida originalmente con el título porque devolverá nulo. Parece ser más una vista alternativa que la vista real para los elementos de menú predeterminados.

+0

funcionó para mí :) – Shivansh

Cuestiones relacionadas