LEER ACTUALIZACIÓN 2 ABAJO PARA LA RESPUESTAAjuste ActionBarSherlock Tema para aplicación Android
Estoy intentando utilizar ActionBarSherlock en mi aplicación. Revisé la versión 4.0.0 del project 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 esqueleto 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 se queja (libro de oraciones: 44) es la llamada a setContentView
. La aplicación sólo consta de una sola actividad con un onCreate()
método que yo llamo setTheme()
a partir de la parte superior:
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);
}
que debe estar cubierto el tema de forma incorrecta, 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. He intentado que de este modo:
<application android:label="@string/app_name" android:icon="@drawable/icon" android:theme="@style/Theme.Sherlock">
<activity android:name="PrayerBook"
android:label="@string/app_name"
android:configChanges="orientation|keyboardHidden|screenLayout|uiMode|mcc|mnc|locale|navigation|fontScale|screenSize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="LanguagesActivity" />
</application>
pero Ant me da un error cuando se trata de construir 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 su seguimiento de los comentarios, Pude hacerlo funcionar. Necesitaba agregar ActionBarSherlock como una dependencia del proyecto. Para hacerlo,
1) Eliminé library-4.0.0.jar
y android-support-4.0.jar
del directorio de lib
de mi proyecto.
2) A continuación, navegue a la carpeta library
dentro de la raíz del directorio ActionBarSherlock desprotegido de github. Escriba android update project
para que se cree un archivo build.xml
y proguard.cfg
para la biblioteca.
3) Por último, cd
de nuevo en el directorio principal de un proyecto y agregar ABS como una dependencia biblioteca con android update project --path . --library ../ActionBarSherlock/library
La ruta de acceso al --library
en el comando variará en función de donde se desprotegió el repositorio. ActionBarSherlock y el directorio de proyectos de mi aplicación eran directorios hermanos.
Ir a descargar el código fuente de la aplicación ABS de ejemplo en ABS github y echar un vistazo – xDragonZ
Ese fue el primer lugar que verifiqué. En la aplicación demos de ABS, el miembro estático THEME de la clase SampleList se inicializa en R.style.Theme_Sherlock pero nunca se utiliza en esa actividad, excepto para cambiar su valor almacenado en el menú de opciones. Todas las actividades comenzaron a partir de esa actividad principal llamada setTheme() con esa constante como el argumento en la parte superior de su método onCreate(), que es por lo que hago lo mismo en mi código. Notará que la misma instrucción también figura en el segundo párrafo de la sección "Temas para padres" en el sitio de ABS. http://actionbarsherlock.com/theming.html –