Les classes suivantes n'ont pas pu être instanciées: - android.support.v7.widget.Toolbar


104

Je crée une application avec le nouveau Material Design utilisé dans Android Lollipop (5.0).

J'utilise les guides suivants:

Après avoir créé ma barre d'outils, je reçois cette erreur: "Les classes suivantes n'ont pas pu être instanciées: - android.support.v7.widget.Toolbar"

L'application fonctionne bien dans le téléphone ou l'émulateur, mais le concepteur de mise en page d'Android Studio n'affiche pas correctement la mise en page.

Voici quelques images:

Erreur dans l'aperçu de la mise en page my_awesome_toolbar.xml erreur dans my_awesome_toolbar.xml

Erreur dans l'aperçu de la mise en page activity_my.xml erreur dans activity_my.xml

Le code xml des fichiers:

my_awesome_toolbar.xml:

<?xml version="1.0" encoding="utf-8"?>

<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/my_awesome_toolbar"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:minHeight="?attr/actionBarSize"
android:background="?attr/colorPrimary" />

activity_my.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:tools="http://schemas.android.com/tools"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/root"
            tools:context="com.myapp.test.MyActivity"
            android:orientation="horizontal">

    <include
        android:id="@+id/toolbar"
        layout="@layout/my_awesome_toolbar"
        />
    <!-- Rest of layout -->
</RelativeLayout>

MyActivity.java:

package com.myapp.test;

import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;


public class MyActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);

        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.my, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

code xml des styles (valeurs / styles.xml):

<resources>

    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="colorPrimary">@color/blue</item>
        <item name="colorPrimaryDark">@color/dark_blue</item>
        <item name="actionOverflowButtonStyle">@style/AppTheme.OverflowButtonStyle</item>
    </style>

    <!-- Style Title -->
    <style name="Title">
        <item name="android:textColor">@color/white</item>
        <item name="android:textStyle">bold</item>
        <item name="android:textSize">16sp</item>
    </style>

    <style name="AppTheme.OverflowButtonStyle" parent="Widget.AppCompat.ActionButton.Overflow">
        <item name="android:src">@drawable/overflow_icon</item>
    </style>
</resources>

Pour le moment, j'utilise Android Studio Beta 0.8.9


Essayez de mettre à jour le studio Android. La dernière version est la 0.8.14. Il peut avoir des mises à jour pour le Toolbarrendu.
Anton Holovin

Merci, la solution était de mettre à jour Android Studio.
firespacexyz

J'ai eu un problème similaire et résolu en suivant ceci: stackoverflow.com/a/33903057/1214729
Victor Augusto

Réponses:


96

Pour Android Studio (ou IntelliJ IDEA),

Si tout semble correct dans votre projet et que vous recevez toujours l'erreur dans toutes vos mises en page, essayez de «Invalider les caches et redémarrer».

Attendez qu'Android Studio ait terminé pour créer tous les caches et index.

comment invalider le cache et redémarrer


Merci, cette réponse m'a aidé.
hash

cela m'a vraiment aidé ... c'est bizarre que nous devions le faire mais merci @gbero
MetaSnarf

2
cela m'est arrivé généralement après une mise à jour d'Android Studio. Probablement certains index internes se
révèlent

1
Remarque: cela supprimera votre «histoire locale», donc c'est un peu extrême. Android Studio 2.2.3 a un lien `` vider le cache '' dans la boîte de dialogue du journal d'aperçu de l'interface utilisateur, essayez d'abord, mais aucune des solutions n'a fonctionné pour moi.
fishjd

1
Cela n'a pas fonctionné pour moi, j'ai mis à jour la version appCompat - v7 de 23 à 25.3.1. aidé à le faire fonctionner pour moi
Antroid

164

J'ai changé le fichier res / values ​​/ styles.xml de ceci:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

pour ça:

<style name="AppTheme" parent="Base.Theme.AppCompat.Light.DarkActionBar">

et cela a résolu le problème.


3
Après l'échec des deux autres solutions, celle-ci a fonctionné pour moi.
J'ai combattu un ours une fois.

9
Quelle est la logique de cette solution
blackHawk

Cela a fonctionné wow! . Je veux vraiment savoir pourquoi, s'il vous plaît, quelqu'un se soucie d'expliquer?
annulé le

2
Et NoActionBardans Base. À quoi sert le remplacement Theme.AppCompat.NoActionBar?
Mario Velasco le

1
Cela a fonctionné pour moi, mais si vous regardez le code lui-même qui le déclare, il y a des commentaires qui disent que vous ne devriez probablement PAS faire référence à Base.Theme.Wthing dans votre application. Donc je dirais que ce n'est PAS le comportement attendu.
JoeHz

35

J'ai fait ce que @gbero a dit et j'ai changé le numéro de version Android que Studio utilise de 22 à 17 et cela fonctionne.

J'utilise la compatibilité ascendante pour construire pour Android ver 22 mais pour cibler 17 (idk si cela est correctement dit, j'essaie toujours de comprendre ce truc de l'application), ce qui a déclenché la compatibilité ascendante, ce qui est afaik android.support.v7.*. C'est probablement un bug avec leur code de rendu. Je ne sais pas si la suppression du cache comme suggéré ci-dessus était nécessaire car le rendu ne fonctionnait pas juste après l'invalidation du cache, il a commencé à fonctionner après avoir changé la version à rendre. Si je reviens à la version 22, le rendu s'arrête, si je repasse en 17, cela fonctionne à nouveau.

ma solution


Je suis confronté au même problème, j'ai déjà tout fait, mais mon problème n'est pas encore résolu. Comment puis-je le résoudre?
Atiar Talukdar

1
Désolé pour la réponse tardive, je ciblais la version 17 de l'API, si vous ciblez, disons 16, alors passer à 16, 17 serait toujours la mauvaise version. J'ai eu tellement de mal à faire fonctionner ce foutu IDE que je viens de commencer à utiliser la ligne de commande. Même chose avec Visual Studio, ils sont tous deux sur-conçus et ils deviennent un fardeau, pas un outil.
Overloaded_Operator

Mon problème est résolu, après avoir changé le niveau d'API et mis à jour certains fichiers. Thanks In Advance
Atiar Talukdar

@Overloaded_Operator Si votre minSdkVersionversion est 17, je suggérerais d'exécuter l'application sur un émulateur avec le niveau API 17 ou un appareil réel avec le niveau API 17 et de confirmer si l'interface utilisateur ressemble à ce qui est attendu et non à ce qui est rendu dans Android Studio
John


12

Une autre erreur qui peut avoir le même effet peut être le mauvais thème dans l'aperçu. Pour une raison quelconque, j'avais choisi un autre thème ici. Après avoir choisi mon AppTheme, cela a bien fonctionné à nouveau:

options de mise en page


Cela a fonctionné pour moi. Mais comment savons-nous quel thème choisir. Je suis débutant sur Android
Menuka Ishan

1
Vous devez choisir le même thème que celui que vous avez spécifié pour l'activité qui utilise le fichier de mise en page. Il est souvent défini dans le fichier AndroidManifest.xml et défini dans res / values ​​/ styles.xml ou res / values ​​/ themes.xml
Björn Kechel

Merci :) Il n'y a pas de themes.xml dans mon application de test mais le thème était dans AndroidManifest.xml. Mais je ne peux pas m'empêcher de me demander pourquoi diable ils donnent l'option de le changer, si ça va donner une erreur? S'il doit être édité en xml, pourquoi ne le montrer qu'à droite, comme du texte, mais pas comme une option pour changer un thème? Un débutant serait égaré
Menuka Ishan

1
Vous devriez probablement lire un peu la documentation du développeur: developer.android.com/guide/topics/ui/themes.html En plus des thèmes, ils couvrent la plupart des choses dont un débutant a besoin.
Björn Kechel

9

Désolé si je me réponds, mais enfin, la solution de mon problème a été de mettre à jour Android Studio vers la nouvelle version 0.8.14 par Canary Channel: http://tools.android.com/recent/

Après la mise à jour, le problème a disparu:

Après la mise à jour, le problème a disparu

Je laisse cette question ici à ceux qui auront ce problème à l'avenir.


11
Non, je suis sur Android Studio 1.2 RC 2 et j'obtiens toujours cette erreur.
IgorGanapolsky

Voir ma réponse ci-dessous @IgorGanapolsky
gbero

Je suis sur Android 2.2 et studio je reçois toujours le problème
Ab


5

J'ai fait ce que @ang_lee a dit et j'ai également ajouté cette ligne au style de thème de l'application:

<item name="windowActionBar">false</item>

J'utilise la version 26.0.1:

com.android.support:design:26.0.1
com.android.support:appcompat-v7:26.0.1

outils de construction:

buildToolsVersion "26.0.1"

Je devais ajouter aussi ceci:<item name="windowNoTitle">true</item
Mario Velasco

2

J'ai eu la même erreur sur l'écran de mon Android Studio lorsque je voulais prévenir mon projet. Je résout le problème de cette manière:

1- Je change la version de 22 à 21. Mais si je reviens à la version 22, le rendu s'arrête, si je repasse en 21, ça marche à nouveau. Merci @Overloaded_Operator

J'ai mis à jour mon Android Studio mais ne fonctionne pas. Merci @ Salvuccio96


1

rien de ce qui précède n'a fonctionné pour moi, j'ai mis à jour la version appCompat - v7 dans mon fichier gradle d'application de 23 à 25.3.1. aidé à le faire fonctionner pour moi


1

Recherchez styles.xml dans le dossier app / res / values.

L'attribut parent du style peut manquer "Base". Cela devrait commencer comme

<style name="AppTheme" parent="Base.Theme.AppCompat...

0

J'ai eu la même erreur. Finalement, j'ai reçu cet avis qu'un plugin était obsolète:

boîte de dialogue d'erreur

Après la mise à jour, le problème a disparu.


0

Les solutions ci-dessus ne m'ont pas aidé. J'ai essayé 2 premières étapes à partir de ce lien . A bien fonctionné pour moi. Mais n'oubliez pas de

import com.melnykov.fab.FloatingActionButton; 

au lieu de

import android.support.design.widget.FloatingActionButton;

dans votre MainActivity.java


0

J'utilise Android Studio 2.3.3: - Ouvrez styles.xml - Android Studio affichera une notification en haut à droite avec deux options: "Ouvrir l'éditeur" et "Masquer la notification". - Cliquez sur "ouvrir l'éditeur" - Sous le menu déroulant du thème parent, cliquez sur afficher tous les thèmes - Sélectionnez un thème commençant par AppCompat ... (j'ai utilisé AppComat.DayNight)

NB: Si votre barre de titre disparaît, vous devez étendre AppCompatActivity au lieu d'Activité.

Bonne chance!


0

J'ai eu le même problème pour l'une des activités de mon application, l'une des causes de ce problème est que le thème dans l'éditeur de thème peut être différent du thème défini dans le 'styles.xml'.changez le thème dans l'éditeur de thème à votre 'Apptheme' ou à votre thème personnalisé (si vous l'avez défini). Faire cela a résolu mon problème.


0

Mon problème a également été résolu en changeant dans styles.xml

<!-- Base application theme. -->
<style name="AppTheme" parent="Base.Theme.AppCompat.Light.DarkActionBar">
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.