J'essaie d'implémenter la nouvelle bibliothèque de support v7 ActionBar
. Cependant, je n'arrive pas à le faire fonctionner correctement.
Voici l'exception
07-25 09:30:01.704: E/AndroidRuntime(9175): FATAL EXCEPTION: main
07-25 09:30:01.704: E/AndroidRuntime(9175): Java.lang.NoClassDefFoundError: Android.support.v7.appcompat.R$styleable
07-25 09:30:01.704: E/AndroidRuntime(9175): at Android.support.v7.app.ActionBarActivityDelegate.onCreate(ActionBarActivityDelegate.Java:98)
07-25 09:30:01.704: E/AndroidRuntime(9175): at Android.support.v7.app.ActionBarActivityDelegateICS.onCreate(ActionBarActivityDelegateICS.Java:58)
07-25 09:30:01.704: E/AndroidRuntime(9175): at Android.support.v7.app.ActionBarActivity.onCreate(ActionBarActivity.Java:98)
07-25 09:30:01.704: E/AndroidRuntime(9175): at com.cidaut.termoweb.MainActivity.onCreate(MainActivity.Java:23)
07-25 09:30:01.704: E/AndroidRuntime(9175): at Android.app.Activity.performCreate(Activity.Java:5133)
07-25 09:30:01.704: E/AndroidRuntime(9175): at Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1087)
07-25 09:30:01.704: E/AndroidRuntime(9175): at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2175)
07-25 09:30:01.704: E/AndroidRuntime(9175): at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2261)
07-25 09:30:01.704: E/AndroidRuntime(9175): at Android.app.ActivityThread.access$600(ActivityThread.Java:141)
07-25 09:30:01.704: E/AndroidRuntime(9175): at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1256)
07-25 09:30:01.704: E/AndroidRuntime(9175): at Android.os.Handler.dispatchMessage(Handler.Java:99)
07-25 09:30:01.704: E/AndroidRuntime(9175): at Android.os.Looper.loop(Looper.Java:137)
07-25 09:30:01.704: E/AndroidRuntime(9175): at Android.app.ActivityThread.main(ActivityThread.Java:5103)
07-25 09:30:01.704: E/AndroidRuntime(9175): at Java.lang.reflect.Method.invokeNative(Native Method)
07-25 09:30:01.704: E/AndroidRuntime(9175): at Java.lang.reflect.Method.invoke(Method.Java:525)
07-25 09:30:01.704: E/AndroidRuntime(9175): at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:737)
07-25 09:30:01.704: E/AndroidRuntime(9175): at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:553)
07-25 09:30:01.704: E/AndroidRuntime(9175): at dalvik.system.NativeStart.main(Native Method)
Le problème se produit lors de l'appel de super.onCreate(bundle)
à onCreate()
.
Voici tous mes XML liés à la thématique:
styled.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Theme.Termoweb" parent="@style/Theme.AppCompat.Light.DarkActionBar">
<item name="actionBarItemBackground">@drawable/selectable_background_termoweb</item>
<item name="popupMenuStyle">@style/PopupMenu.Termoweb</item>
<item name="dropDownListViewStyle">@style/DropDownListView.Termoweb</item>
<item name="actionBarTabStyle">@style/ActionBarTabStyle.Termoweb</item>
<item name="actionDropDownStyle">@style/DropDownNav.Termoweb</item>
<item name="actionBarStyle">@style/ActionBar.Solid.Termoweb</item>
<item name="actionModeBackground">@drawable/cab_background_top_termoweb</item>
<item name="actionModeSplitBackground">@drawable/cab_background_bottom_termoweb</item>
<item name="actionModeCloseButtonStyle">@style/ActionButton.CloseMode.Termoweb</item>
<!-- Light.DarkActionBar specific -->
<item name="actionBarWidgetTheme">@style/Theme.Termoweb.Widget</item>
</style>
<style name="ActionBar.Solid.Termoweb" parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse">
<item name="background">@drawable/ab_solid_termoweb</item>
<item name="backgroundStacked">@drawable/ab_stacked_solid_termoweb</item>
<item name="backgroundSplit">@drawable/ab_bottom_solid_termoweb</item>
<item name="progressBarStyle">@style/ProgressBar.Termoweb</item>
</style>
<style name="ActionBar.Transparent.Termoweb" parent="@style/Widget.AppCompat.ActionBar">
<item name="background">@drawable/ab_transparent_termoweb</item>
<item name="progressBarStyle">@style/ProgressBar.Termoweb</item>
</style>
<style name="PopupMenu.Termoweb" parent="@style/Widget.AppCompat.ListView.Menu">
<item name="popupBackground">@drawable/menu_dropdown_panel_termoweb</item>
</style>
<style name="DropDownListView.Termoweb" parent="@style/Widget.AppCompat.ListView.DropDown">
<item name="listSelector">@drawable/selectable_background_termoweb</item>
</style>
<style name="ActionBarTabStyle.Termoweb" parent="@style/Widget.AppCompat.ActionBar.TabView">
<item name="background">@drawable/tab_indicator_ab_termoweb</item>
</style>
<style name="DropDownNav.Termoweb" parent="@style/Widget.AppCompat.Spinner">
<item name="background">@drawable/spinner_background_ab_termoweb</item>
<item name="popupBackground">@drawable/menu_dropdown_panel_termoweb</item>
<item name="dropDownSelector">@drawable/selectable_background_termoweb</item>
</style>
<style name="ProgressBar.Termoweb" parent="@style/Widget.AppCompat.ProgressBar.Horizontal">
<item name="progressDrawable">@drawable/progress_horizontal_termoweb</item>
</style>
<style name="ActionButton.CloseMode.Termoweb" parent="@style/Widget.AppCompat.ActionButton.CloseMode">
<item name="background">@drawable/btn_cab_done_termoweb</item>
</style>
<!-- this style is only referenced in a Light.DarkActionBar based theme -->
<style name="Theme.Termoweb.Widget" parent="@style/Theme.AppCompat">
<item name="popupMenuStyle">@style/PopupMenu.Termoweb</item>
<item name="dropDownListViewStyle">@style/DropDownListView.Termoweb</item>
</style>
</resources>
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="com.cidaut.termoweb"
Android:versionCode="1"
Android:versionName="1.0" >
<uses-sdk
Android:minSdkVersion="8"
Android:targetSdkVersion="17" />
<application
Android:allowBackup="true"
Android:icon="@drawable/ic_launcher"
Android:label="@string/app_name"
Android:theme="@style/Theme.Termoweb" >
<activity
Android:name="com.cidaut.termoweb.MainActivity"
Android:label="@string/app_name" >
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Alors, comment j'ai résolu ce problème:
J'ai fait ce qui suit et travaillé pour moi.
Assurez-vous que votre en Manifest.xml votre activité a le thème correct
<activity
Android:name="***.*****.******"
Android:label="@string/app_name"
Android:theme="@style/Theme.AppCompat.Light"
>
Bonne chance ;)
En plus de la réponse de BoredT, j'ai ajouté cette ligne à res/values / styles.xml
<style name="AppTheme" parent="@style/Theme.AppCompat.Light">
Suivez les étapes d'ajout de bibliothèques avec des ressources -> Eclipse http://developer.Android.com/tools/support-library/setup.html :
Android.library.reference.1=../Android-support-v7-appcompat
à votre project.propertiesAndroid:theme="@style/Theme.AppCompat"
Je l'ai utilisé dans le tag d'application, vous pouvez également l'appliquer à des activités individuellesReconstruisez tout!
Je pense que vous devriez changer votre version cible en 18 dans le manifeste.
Android:targetSdkVersion="18"
Comment importer un projet en tant que bibliothèque dans Android studio? Suivez le blog de conseils comme référence: http://showlabor.blogspot.com.br/2013/05/actionbarsherlock -en-Android-studio-01.html
La question suivante a également beaucoup aidé: Erreur lors de l'implémentation de la barre d'actions de la bibliothèque de support
L'image suivante montre la structure du projet importé. Celui-ci est copié à la racine de mon projet et placé dans le répertoire 'bibliothèques': https://dl.dropboxusercontent.com/u/67269258/Tuto/tree.PNG
En plus de monter la structure ci-dessus. Dans 'settings.glade' j'ai dû ajouter le nouveau projet:
include ':FreeMusic', ':libraries:ActionBarCompat:appcompat'
A l'intérieur du projet de bibliothèque, ajouté le fichier 'build.gradle' Il se trouve dans: bibliothèques/ActionBarCompat/appcompat
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.Android.tools.build:gradle:0.5.+'
}
}
apply plugin: 'Android-library'
dependencies {
compile files(
'libs/Android-support-v4.jar',
'libs/Android-support-v7-appcompat.jar'
)
}
Android {
compileSdkVersion 18
buildToolsVersion "18.0.1"
defaultConfig {
minSdkVersion 7
targetSdkVersion 16
}
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
Java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
instrumentTest.setRoot('tests')
}
}
Dans 'build.gradle' (projet interne) de mon projet.
dependencies {
compile project(':libraries:ActionBarCompat:appcompat')
}
Dans Android a ajouté le thème nécessaire:
<activity
Android:theme="@style/Theme.AppCompat"
Android:name="es.hol.soundmedia.MainActivity"
Après tout ce travail. Peut-être un moyen plus simple de configurer cela, mais pour moi, le compte fonctionne. Malheureusement, je ne peux pas afficher le résultat, car je suis bloqué, mais j'espère que les instructions vous aideront.
Pour ceux qui n'aiment pas avoir besoin d'un effort manuel de l'utilisateur dans Eclipse pour faire une construction à partir de la caisse, le changement magique qu'Eclipse fait est d'ajouter une ligne à project.properties comme:
Android.library.reference.1=../Android-support-v7-appcompat
C'est suffisant pour construire votre application à partir de fourmi. Vous pouvez le faire vous-même dans la source ou via l'interface utilisateur Eclipse - dans les deux cas, vous pouvez l'archiver dans votre système de contrôle de version et créer avec succès à partir d'une nouvelle extraction de la source sans nécessiter d'étapes manuelles.
Mais vous pouvez plutôt faire du chemin un sous-répertoire de votre propre projet si cela vous convient mieux, par exemple.
Android.library.reference.1=Android-support-v7-appcompat
... et ...
cp -r $SDK/extras/Android/support/v7/appcompat Android-support-v7-appcompat
Notez qu'Eclipse affichera toujours divers avertissements jusqu'à ce que le sous-répertoire soit également ajouté [manuellement!] À l'espace de travail d'Eclipse en tant que projet. Mais une génération de fourmis réussira à construire sans utiliser Eclipse.
Voici comment je résous le problème: reconstruisez le projet de bibliothèque android-support-v7-appcompat dans votre espace de travail Eclipse. Reconstruisez ensuite votre propre projet.
Vérifiez que R.Java pour jar compatible avec app7 est présent dans vos dossiers générés de votre application