martes, 18 de septiembre de 2012

Tutorial de ActionBarSherlock


En Android existe un patrón de diseño llamado ActionBar consistente en una barra situada en la parte superior de la aplicación. Identifica la aplicación y permite al usuario saber donde se encuentra dentro de la aplicación. También permite situar acciones y modos de navegación fácilmente usables para el usuario.

Ejemplo de ActionBar.
Este patrón de diseño se introdujo con la versión Android 3.0 (Honeycomb - API 11) por lo que no está disponible para versiones inferiores (mas detalles en la guia oficial). Al no estar soportadas de forma oficial las versiones inferiores a Android 3.0, para poder usarla es necesario recurrir a bibliotecas no oficiales. 
A continuación se explica como usar ActionBarSherlock creada por Jake Wharton . Esta biblioteca permite usar ActionBar de forma nativa  en versiones Android 3.0 o superiores y en dispositivos con Android 2.X implementa una versión propia de ActionBar compatible a nivel de API con la oficial. No es necesario duplicar código para soportar diferentes versiones ya que el API usado por la biblioteca, es un duplicado del ActionBar oficial de Android.


Instalación de ActionBarSherlock.

Para poder usar la biblioteca en nuestros proyectos primero se ha de compilar, ya que no se suministra un archivo *.jar, sino sólo el código fuente. Los pasos a seguir en Eclipse son los siguientes:

  1. Descargar el código de la página web del autor. La última versión disponible (a fecha Agosto 2012) es la versión 4.1.0.
  2. Extraer el archivo comprimido en un directorio temporal. Se crearán tres directorios separados: library, samples y website.
  3. Importar el proyecto a Eclipse mediante File -> New -> Android Project from Existing Code. El directorio de origen sera el creado en el punto anterior. Si solo interesa el código de la librería, con seleccionar el directorio “library” es suficiente. Para copiar la librería al workspace de Eclipse se selecciona el checkbox "Copy projects into workspace". Una vez importado el proyecto se puede cambiar el nombre del proyecto, por ejemplo a “ActionBarSherlock-4.1.0”. De lo contrario aparecerá como library.
  4. A continuación nos aseguramos que el nuevo proyecto esta correctamente configurada haciendo click con el botón derecho del ratón y seleccionando "Propiedades". En la nueva ventana, seleccionar "Android" y han de estar marcadas la versión Android 4.0 y el checkBox "Is Library".
  5. Configuración.
  6. También ha de tener la biblioteca de compatibilidad instalada. Lo mas sencillo es buscar dentro de la carpeta “libs”. A continuación pulsar con el botón derecho del ratón sobre el archivo “android-support-v4.jar” y seleccionar “Build -> Add to build Path”.
Librerías referenciadas.
De esta forma ya tenemos instalada la biblioteca en Eclipse disponible para futuros proyectos.

Uso de ActionBarSherlock.

Se crea un nuevo proyecto en Eclipse cuya versión de destino mínima sea Android 4.0 (API 14) ya que esta versión es la requerida por ActionBarSherlock. Mas tarde se puede indicar cual es la versión mínima con la que funcionara nuestro programa modificando las siguientes líneas del manifiesto:

Ejemplo Android Manifest :
<uses-sdk 
android:minSdkVersion="4"
android:targetSdkVersion="15" />

Una vez creado el proyecto, se selecciona el proyecto y se pulsa el botón derecho del ratón y en Propiedades -> Android, no se marca la opción “Is library” y en cambio, se añade el proyecto que hemos importado anteriormente. En este caso, “ActionBarSherlock-4.1.0”.
Uso de ActionBarSherlock

La clase que use un ActionBar, ha de derivar de SherlockActivity en lugar de la clase Activity.
public class MainActivity extends Activity  {
ha de ser :
public class MainActivity extends SherlockActivity {

Modificando el Android Manifest se puede cambiar el tema de la aplicación para que use el de Sherlock :
<application
   android:icon="@drawable/ic_launcher"
   android:label="@string/app_name"
   android:theme="@style/Theme.Sherlock"

Ahora se puede ejecutar la aplicación y ver la biblioteca en funcionamiento.

A partir de aquí, se pueden usar otros aspectos de la biblioteca, como pueden ser los Fragments, Listas, etc. Si se quiere recuperar la barra desde código se puede llamar al método getSupportActionbar() en lugar de getActionBar() que es el usado por a API oficial. El resto de métodos son iguales a los de la API oficial.

En caso de usar Proguard, se han de añadir las siguientes lineas al archivo proguard-project.txt para poder compilar correctamente el proyecto,

-keep class android.support.v4.app.** { *; }
-keep interface android.support.v4.app.** { *; }
-keep class com.actionbarsherlock.** { *; }
-keep interface com.actionbarsherlock.** { *; }
-keepattributes *Annotation*


Referencias:
https://developer.android.com/guide/topics/ui/actionbar.html http://actionbarsherlock.com/faq.htm

8 comentarios:

  1. Muy buen tutorial!!!.

    Que versión de Eclipse usaste?.

    Saludos
    Iván

    ResponderEliminar
    Respuestas
    1. Gracias, espero que te haya sido útil.
      La versión de Eclipse era la última disponible, Eclipse 4.2 (Juno).

      Eliminar
  2. Muchas gracias por el tutorial.
    Me ha venido genial para poder utilizar el ActionBarSherlock.
    Ahora sólo me queda comprobar que funciona bien tanto en 3.+ como en versiones anteriores.

    ResponderEliminar
  3. Hola, ¿sabes si el icono de la aplicación que aparece en el ActionBar tiene que ser el mismo icono que aparece en tu lista de aplicaciones de tu móvil?
    En caso de que no, como cambiar uno y otro.
    Gracias, saludos.

    ResponderEliminar
    Respuestas
    1. Hola, pueden ser diferentes. El icono que aparece en la lista de aplicacion del movil se define en el archivo AndroidManifest.xml dentro del apartado "Application".

      application ...
      android:icon="@drawable/ic_launcher"


      El icono que aparece en la ActionBar, se puede cambiar en la Activity usando getSupportActionBar

      protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);

      setContentView(R.layout.activity_main);
      getSupportActionBar().setIcon(R.drawable.ic_launcher_alt);

      }

      Eliminar
  4. Muy buen aporte.. Se agradece. funciono perfecto.

    ResponderEliminar
  5. Resulta util, pero para Apps destiandas a producción, convendría extender el tutorial para crear un .jar que poder importar en libs, ya que los pasos de este tutorial crean una independencia entre los proyectos a crear y el proyecto "actionbarsherlock" que puede resultar poco mantenible.
    No obstante, como comienzo está muy bien.

    ResponderEliminar
    Respuestas
    1. Hola, lo que comentas no es posible con el sistema actual. ActionBarSherlock ha de usarse como una librería de proyecto Android, no como un .jar.

      Según http://actionbarsherlock.com/faq.html , ha de ser una librería de proyecto y no un .jar debido a que es una extensión de la librería android-support-v4.jar y los proyectos con recursos no pueden ser compilados como .jar.

      http://actionbarsherlock.com/faq.html

      https://groups.google.com/forum/?fromgroups=#!topic/actionbarsherlock/a9BZ-ugABDA

      Eliminar