Configuración del tema ActionBarSherlock para Android

LEA LA ACTUALIZACIÓN 2 A CONTINUACIÓN PARA LA RESPUESTA

Estoy intentando usar ActionBarSherlock en mi aplicación. Revisé la versión 4.0.0 del proyecto github repo , lo construí en Netbeans, luego copié el archivo library-4.0.0.jar en el directorio lib de mi proyecto (no estoy usando Eclipse).

Es solo una actividad esquemática en este momento, y se inicia muy bien en ICS, pero cuando lo ejecuto en Gingerbread recibo la siguiente excepción quejándome de que no tengo el tema de la aplicación para Theme.Sherlock (o similar):

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.arashpayan.prayerbook/com.arashpayan.prayerbook.PrayerBook}: java.lang.IllegalStateException: You must use Theme.Sherlock, Theme.Sherlock.Light, Theme.Sherlock.Light.DarkActionBar, or a derivative. at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663) at android.app.ActivityThread.access$1500(ActivityThread.java:117) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:130) at android.app.ActivityThread.main(ActivityThread.java:3683) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:507) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) at dalvik.system.NativeStart.main(Native Method) Caused by: java.lang.IllegalStateException: You must use Theme.Sherlock, Theme.Sherlock.Light, Theme.Sherlock.Light.DarkActionBar, or a derivative. at com.actionbarsherlock.internal.ActionBarSherlockCompat.generateLayout(ActionBarSherlockCompat.java:987) at com.actionbarsherlock.internal.ActionBarSherlockCompat.installDecor(ActionBarSherlockCompat.java:899) at com.actionbarsherlock.internal.ActionBarSherlockCompat.setContentView(ActionBarSherlockCompat.java:852) at com.actionbarsherlock.ActionBarSherlock.setContentView(ActionBarSherlock.java:655) at com.actionbarsherlock.app.SherlockFragmentActivity.setContentView(SherlockFragmentActivity.java:316) at com.arashpayan.prayerbook.PrayerBook.onCreate(PrayerBook.java:44) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611) ... 11 more 

La línea de la que se queja (PrayerBook: 44) es la llamada a setContentView . La aplicación solo consiste en una sola actividad con un método onCreate() que llamo setTheme() desde arriba:

 public void onCreate(Bundle savedInstanceState) { setTheme(com.actionbarsherlock.R.style.Theme_Sherlock); super.onCreate(savedInstanceState); TextView rootTextView = new TextView(this); rootTextView.setText("Hello, world!"); setContentView(rootTextView); getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); ActionBar.Tab tab = getSupportActionBar().newTab(); tab.setText("Prayers"); getSupportActionBar().addTab(tab); tab = getSupportActionBar().newTab(); tab.setText("Recents"); getSupportActionBar().addTab(tab); tab = getSupportActionBar().newTab(); tab.setText("Bookmarks"); getSupportActionBar().addTab(tab); } 

Debo configurar el tema incorrectamente, pero simplemente no veo cómo. ¿Alguien puede ayudar?

ACTUALIZACIÓN A continuación, CommonsWare señaló que el tema se puede configurar en AndroidManifest.xml. Lo he intentado así:

          

pero Ant me da un error cuando intenta comstackr la aplicación:

 /Users/arash/coding/prayerbook/AndroidManifest.xml:7: error: Error: No resource found that matches the given name (at 'theme' with value '@style/Theme.Sherlock'). 

ACTUALIZACIÓN 2 Con la ayuda de CommonsWare en sus comentarios de seguimiento, pude hacerlo funcionar. Necesitaba agregar ActionBarSherlock como una dependencia del proyecto. Para hacerlo,

1) library-4.0.0.jar y android-support-4.0.jar del directorio lib de mi proyecto.

2) Luego, vaya a la carpeta de la library dentro de la raíz del directorio ActionBarSherlock desprotegido de github. Escriba el android update project para que se build.xml un archivo build.xml y proguard.cfg para la biblioteca.

3) Finalmente, vuelva a android update project --path . --library ../ActionBarSherlock/library en el directorio principal del proyecto y agregue ABS como una dependencia de la biblioteca con el android update project --path . --library ../ActionBarSherlock/library android update project --path . --library ../ActionBarSherlock/library La ruta a --library en el comando variará de acuerdo con el lugar en el que revisó el repository. ActionBarSherlock y el directorio de proyectos de mi aplicación eran directorios hermanos.

Por lo general, configura su tema en el manifiesto, como se muestra en la documentación del desarrollador de Android (y enlazado desde la página de temas de ActionBarSherlock ).

Si desea usar ActionBarSherlock en todas partes dentro de su aplicación, esto funciona:

  

Para mí esto fue causado por no usar @style/ prefix. Es decir, tuve

  

en lugar de

  

Lo cual es un poco raro porque juro que el valor predeterminado de la plantilla es algo así como:

  
   com.actionbarsherlock library 4.1.0 apklib    com.actionbarsherlock library 4.1.0 jar provided  

La sugerencia es usar el tipo “apklib”, eso significa que maven usará todas las fonts (también los recursos). Otra dependencia del archivo jar (scope “provisto”) se usa para lograr un enlace a las clases de sherlock durante la encoding.

Tenía el mismo problema. La aplicación se colgó aunque el tema se configuró en el manifiesto. Configurar el tema programáticamente resolvió el problema:

 @Override protected void onCreate(Bundle savedInstanceState) { setTheme(R.style.AppTheme); super.onCreate(savedInstanceState); 

Esto me estaba pasando en IntelliJ IDEA. Resolví este problema yendo a Archivo> Estructura del proyecto> Configuración del proyecto> Facetas> Seleccionar el módulo de barra de acciones de la segunda columna> Verifique la checkbox “Módulo de biblioteca”> Aplicar y Aceptar> Guardar y reconstruir.

ACTUALIZACIÓN Después de una revisión posterior, mi respuesta original puede ser demasiado específica, y probablemente solo funcione en ciertos casos. Este error significa que las dependencias no se han configurado correctamente. En IntelliJ IDEA, siga estos pasos para configurar correctamente la barra de acciones como dependencia de un módulo:

  1. Descargue y extraiga la biblioteca actionbarsherlock del zip (Nota: solo necesita la carpeta “actionbarsherlock”)
  2. Copie y pegue junto con su proyecto de Android
  3. Abra su proyecto en IntelliJ
  4. Archivo> Estructura del proyecto> Configuración del proyecto> Módulos> Agregar (verde ‘+’ arriba de la segunda columna)> Importar módulo> Seleccionar el directorio de barras de acciones en el diálogo del buscador de archivos> Aceptar> Crear módulo desde fonts existentes> Siguiente
  5. Desmarque la carpeta “prueba” para que no se agregue al proyecto y haga clic en “Siguiente”
  6. Debajo de la pestaña Bibliotecas, se debe marcar android-support-v4, haga clic en “Siguiente”
  7. En la pestaña Módulos, se debe marcar actionbarsherlock, haga clic en “Siguiente”
  8. Si le pide que sobrescriba actionbarsherlock.iml, elija “Sobrescribir” y luego “Terminar” (Debe regresar a la sección Módulos del cuadro de diálogo Estructura del proyecto)
  9. Seleccione el módulo actionbarsherlock de la segunda columna y debajo de la pestaña Dependencias en la tercera columna, marque “Exportar” al lado de la biblioteca android-support-v4
  10. ¡Casi allí!
  11. Ahora seleccione su módulo de proyecto de la segunda columna, y debajo de la pestaña Dependencias, haga clic en el botón Agregar (verde ‘+’ en el extremo derecho del cuadro de diálogo)
  12. Seleccione Module Dependency y elija actionbarsherlock desde el diálogo que aparece y presione “OK”
  13. Ahora haga clic en “Aplicar” u “Aceptar” para aceptar los cambios

Eso debería hacer el truco.

Si quieres usar un estilo personalizado, hice una plantilla para el estilo personalizado de ActionBarSherlock . El tema se define en el archivo /values/styles.xml. Se extiende desde Theme.Sherlock.Light theme. Hay muchos parámetros, puede configurar: icono, logotipo, divisor, título, superposición de sombras, botones de menú de acción, menú emergente, fondo de modo de acción, navegación de lista desplegable, estilo de tabulación, opciones de visualización, etc. Casi todo, lo que necesita, para crea tu tema de barra de acciones personalizado. Utilizo esta plantilla en mis aplicaciones, porque me ayuda a diseñar la barra de acciones muy rápidamente.

Puedes encontrar esta plantilla en mi GitHub . Es muy fácil de usar. Simplemente copie valores y directiories dibujables en su proyecto y configure android: theme parameter en el elemento de la aplicación en AndroidManifest.xml :

  

Los drawables en mi plantilla se generaron a través de Android Action Bar Style Generator . Utilizo diferentes convenciones de nomenclatura para recursos. Este sencillo script cambia el nombre de todos los recursos generados con Android Action Bar Style Generator a mi propia convención, utilizada en la plantilla.

Esta no es una respuesta para la pregunta del OP, pero describiré cómo logré obtener la misma excepción que él menciona, con la esperanza de que pueda ayudar a alguien más:

  java.lang.RuntimeException: Unable to start activity ComponentInfo{com.Merlinia.MMessaging_Test/com.Merlinia.MMessaging_Test.TestObjectsActivity}: java.lang.IllegalStateException: You must use Theme.Sherlock, Theme.Sherlock.Light, Theme.Sherlock.Light.DarkActionBar, or a derivative. 

En mi caso, la solución fue muy simple, aunque tardé demasiado en encontrarla. Todo lo que lee sobre esta excepción dice “compruebe que ha especificado el tema en el archivo manifest.xml”, así que eché un vistazo rápido a mi archivo manifest.xml, y allí estaba. Entonces probé varias otras cosas.

Finalmente, eché un vistazo más de cerca a mi archivo manifest.xml. Cometí el error de especificar el tema para la actividad principal, ¡no para toda la aplicación!