web-dev-qa-db-fra.com

Erreur lors de l'implémentation de la barre d'actions de la bibliothèque de support

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>
26
Charlie-Blake

Alors, comment j'ai résolu ce problème:

  1. Importez la bibliothèque de support en tant que projet à partir de "sdk/extras/Android/support/v7/appcompat".
  2. Bibliothèque de référence dans votre projet (pour Eclipse, "Propriétés - Android - Ajouter").
  3. Générez des projets (pour Eclipse, "Projets - Créer tout"). Assurez-vous que vous avez "Android.support.v7.appcompat" dans votre dossier gen de projet principal.
  4. Si cela ne fonctionne pas - nettoyer et reconstruire le projet.
53
BoredT

J'ai fait ce qui suit et travaillé pour moi.

  • Supprimez le bocal du dossier libs.
  • Importez le projet sdk\extras\Android\support\v7\appcompat\dans votre espace de travail Eclipse.
  • Assurez-vous que Android-support-v4.jar est le même dans votre projet.
  • Ajoutez l'application compatible en tant que bibliothèque à votre projet.

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 ;)

14
Angel Ivorra

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">
4
AG1

Suivez les étapes d'ajout de bibliothèques avec des ressources -> Eclipse http://developer.Android.com/tools/support-library/setup.html :

  1. suivez toutes les étapes (utilisez le projet de copie dans l'espace de travail)
  2. ajouter Android.library.reference.1=../Android-support-v7-appcompat à votre project.properties
  3. utilisation Android:theme="@style/Theme.AppCompat" Je l'ai utilisé dans le tag d'application, vous pouvez également l'appliquer à des activités individuelles

Reconstruisez tout!

2
Prakash

Je pense que vous devriez changer votre version cible en 18 dans le manifeste.

Android:targetSdkVersion="18"
1
suresh cheemalamudi

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.

1
alex

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.

1
David Sainty

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.

1
WayneZhao

Vérifiez que R.Java pour jar compatible avec app7 est présent dans vos dossiers générés de votre application

0
subash