2012-07-28 11 views
7

Actualmente estoy implementando el soporte de temas para mi aplicación y una parte está cambiando el ícono de la aplicación de la barra de acciones. Quiero usar un ícono oscuro cuando se selecciona Holo Light. Todo se hace en el método, excepto en la parte donde se establece el icono de la aplicación de la barra de acciones. El código que estoy tratando de utilizar es:Cambio del ícono de la barra de acciones

getActionBar(); 
ActionBar.setIcon(R.drawable.my_icon); 

"No hay tal avavible referencia aquí" es el error que estoy recibiendo. ¿Cómo debe hacerse esto correctamente?

BTW mi minSdkVersion es 14, por lo que no hay nada de acción en la barra de sherlock.

Respuesta

18
getActionBar(); 

Estás tirando la barra de acción allí mismo. getActionBar() devuelve una instancia de ActionBar, que luego debe llamar al setIcon(). Como tal:

ActionBar actionBar = getActionBar(); 
actionBar.setIcon(R.drawable.my_icon); 
+4

'setIcon' es compatible con API nivel 14 y superior. También puede establecer el logotipo de ActionBar en el archivo de manifiesto como se explica aquí: http://stackoverflow.com/a/6351736/1182823 –

+0

Esta solución no funciona cuando uso la biblioteca compatible v7 donde uso getSupportActionBar(); - ¿Cualquier sugerencia? Gracias –

0

Debe agregar el dibujo disponible al que desea hacer referencia en su carpeta drawable/ bajo res/.

editar: En la carpeta de instalación de Android hay muchas imágenes de stock para usar. Probablemente puedas encontrarlo allí.

+0

ya he añadido el icono, eso no es el problema. El autocompletado podría ubicar mi ícono sin ningún problema. Obtengo el mismo error sin importar cuál de mis derivables existentes menciono. Intenté escribir mal mi recurso dibujable a propósito y recibí el mismo error, pero en lugar de marcar el código "setIcon" en rojo, el dibujante mal escrito se marcó en rojo. Esta es una prueba de que mis dibujantes extraíbles y mi IDE pueden encontrarlo. – SweSnow

0

La respuesta existente es muy correcta. Sin embargo, también hay una alternativa. Un enfoque mínima sería utilizar

getActionBar().setIcon(R.drawable.my_icon);

le da su trabajo hecho de inmediato. :)

Detalles técnicos: Dado que getActionBar() de forma predeterminada devuelve un objeto, puede manipularlo directamente sin tener que recibirlo explícitamente en un objeto dentro del ámbito.

4

Aunque es un poco tarde, pero pensé que podría ser útil.

Desde el interior de una actividad: Para el nivel API 14 o superior:

getActionBar().setIcon(R.drawable.my_icon); 

Para el nivel API inferior que tienen que extenderse ActionBarActivity y luego:

getSupportActionBar().setIcon(R.drawable.my_icon); 

Desde el interior de un Fragmento : Para el nivel API 14 o superior:

getActivity().getActionBar().setIcon(R.drawable.my_icon); 

Para el nivel API inferior podemos utilizar (actividad debe extenderse ActionBarActivity):

((ActionBarActivity)getActivity()).getSupportActionBar().setIcon(R.drawable.my_icon); 

Y en ambos casos tenemos que llamar setDisplayShowHomeEnabled (verdadero) antes de poner el icono o logotipo.

((ActionBarActivity)getActivity()).getSupportActionBar().setDisplayShowHomeEnabled(true); 

((ActionBarActivity)getActivity()).getSupportActionBar().setIcon(R.drawable.my_icon); 
0

Llamar a setIcon no fue suficiente para mí.

Antes de eso, tuve que cambiar la pantalla del logotipo de la actividad de icono de actividad:

actionBar.setDisplayUseLogoEnabled(false); 

Para las diferencias entre icono de actividad y el logotipo ver Android icon vs logo.

0

Estoy usando esto para mi uso, y está trabajando para mí. Esperamos que esta ayuda todos

actionBar.setDisplayHomeAsUpEnabled(true); 
actionBar.setHomeAsUpIndicator(R.drawable.icon); 
0

probar este

setSupportActionBar(toolbar); 
    if (getSupportActionBar() != null) 
    getSupportActionBar().setIcon(R.drawable.your_icon); 
Cuestiones relacionadas