Non è stato possibile creare un'istanza delle seguenti classi: - android.support.v7.widget.Toolbar


104

Sto creando un'app con il nuovo Material Design utilizzato in Android Lollipop (5.0).

Sto usando le seguenti guide:

Dopo aver creato la mia barra degli strumenti, ricevo questo errore: "Impossibile istanziare le seguenti classi: - android.support.v7.widget.Toolbar"

L'app funziona bene nel telefono o nell'emulatore, ma il designer del layout di Android Studio non mostra correttamente il layout.

Di seguito alcune immagini:

Errore nell'anteprima del layout my_awesome_toolbar.xml errore in my_awesome_toolbar.xml

Errore nell'anteprima del layout activity_my.xml errore in activity_my.xml

Il codice xml dei file:

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

codice xml degli stili (values ​​/ 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>

Al momento utilizzo Android Studio Beta 0.8.9


Prova ad aggiornare Android Studio. L'ultima versione è la 0.8.14. Potrebbe avere aggiornamenti per il Toolbarrendering.
Anton Holovin

Grazie, la soluzione è stata l'aggiornamento di Android Studio.
firespacexyz

Ho avuto un problema simile e l'ho risolto seguendo questo: stackoverflow.com/a/33903057/1214729
Victor Augusto

Risposte:


96

Per Android Studio (o IntelliJ IDEA),

Se tutto sembra a posto nel tuo progetto e continui a ricevere l'errore in tutti i tuoi layout, prova a "Invalidare le cache e riavviare".

Attendi fino al termine di Android Studio per creare tutte le cache e gli indici.

come invalidare la cache e riavviare


Grazie Questa risposta mi ha aiutato.
hash

questo in realtà mi ha aiutato..è strano che avremmo dovuto farlo, ma grazie @gbero
MetaSnarf

2
questo mi è successo di solito dopo un aggiornamento di Android Studio. Probabilmente alcuni indici interni si
rivelano

1
Nota: questo cancellerà la tua "cronologia locale", quindi sarà un po 'estremo. Android Studio 2.2.3 ha un link "cancella cache" nella finestra di dialogo del registro di anteprima dell'interfaccia utente, prova prima, ma nessuna delle due soluzioni ha funzionato per me.
fishjd

1
Non ha funzionato per me, ho aggiornato la versione di appCompat - v7 dalla 23 alla 25.3.1. ha contribuito a farlo funzionare per me
Antroid

164

Ho cambiato il file res / values ​​/ styles.xml da questo:

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

a questa:

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

e questo ha risolto il problema.


3
Dopo che le altre due soluzioni sono fallite, questa ha funzionato per me.
Ho lottato con un orso una volta.

9
Qual è la logica per questa soluzione
blackHawk

Questo ha funzionato wow! . Voglio davvero sapere perché, per favore, qualcuno si preoccupa di spiegare?
void

2
E NoActionBarin Base. A cosa serve la sostituzione Theme.AppCompat.NoActionBar?
Mario Velasco

1
Ha funzionato per me, ma se guardi il codice stesso che lo dichiara, ci sono commenti che dicono che probabilmente NON dovresti fare riferimento a Base.Theme. Quindi direi che questo NON è il comportamento previsto.
JoeHz

35

Ho fatto quello che ha detto @gbero e ho cambiato il numero di versione di Android che Studio usa da 22 a 17 e funziona.

Sto usando la retrocompatibilità per costruire per Android ver 22 ma per target 17 (idk se è detto correttamente, sto ancora cercando di capire questa roba dell'app) in modo che abbia attivato la retrocompatibilità, che afaik è quello che android.support.v7.*è. Questo è probabilmente un bug con il loro codice di rendering. Non sono sicuro se fosse necessario svuotare la cache come suggerito sopra poiché il rendering non ha funzionato subito dopo aver invalidato la cache, ha iniziato a funzionare dopo che ho modificato la versione per il rendering. Se torno alla versione 22, il rendering si interrompe, se torno alla 17, funziona di nuovo.

la mia soluzione


Sto affrontando lo stesso problema, ho già fatto tutto, ma il mio problema non è ancora risolto. Come posso risolverlo?
Atiar Talukdar

1
Ci scusiamo per la risposta tardiva, stavo prendendo di mira la versione 17 dell'API, se scegli come target, diciamo 16, quindi passa a 16, 17 sarebbe ancora la versione sbagliata. Ho avuto così tanti problemi a far funzionare questo dannato IDE, ho appena iniziato a usare la riga di comando. Come per Visual Studio, sono entrambi troppo ingegnerizzati e diventano un peso, non uno strumento.
Overloaded_Operator

Il mio problema è risolto, dopo aver modificato il livello API e aggiornato alcuni file. Thanks In Advance
Atiar Talukdar

@Overloaded_Operator Se la tua minSdkVersionversione è 17, ti suggerirei di eseguire l'app su un emulatore con livello API 17 o un dispositivo effettivo con livello API 17 e confermare se l'interfaccia utente appare come previsto e non come viene visualizzato in Android Studio
John


12

Un altro errore che può avere lo stesso effetto può essere il tema sbagliato nell'anteprima. Per qualche motivo avevo selezionato qualche altro tema qui. Dopo aver scelto il mio AppTheme ha funzionato di nuovo bene:

opzioni di layout


Questo ha funzionato per me. Ma come sappiamo quale tema scegliere. Sono un principiante di Android
Menuka Ishan

1
È necessario scegliere lo stesso tema specificato per l'attività che utilizza il file di layout. È spesso impostato in AndroidManifest.xml e definito in res / values ​​/ styles.xml o res / values ​​/ themes.xml
Björn Kechel

Grazie :) Non ci sono temi.xml nella mia app di test ma il tema era in AndroidManifest.xml. Ma non posso fare a meno di chiedermi perché diavolo danno la possibilità di cambiarlo, se darà un errore? Se dovrebbe essere modificato in xml, perché mostrarlo solo lì, come testo, ma non come un'opzione per cambiare un tema? Un principiante
sbaglierebbe

1
Probabilmente dovresti leggere un po 'i documenti degli sviluppatori: developer.android.com/guide/topics/ui/themes.html A parte i temi, coprono la maggior parte delle cose di cui un principiante ha bisogno.
Björn Kechel

9

Scusa se mi rispondo ma, alla fine, la soluzione al mio problema è stata aggiornare Android Studio alla nuova versione 0.8.14 di Canary Channel: http://tools.android.com/recent/

Dopo l'aggiornamento, il problema è scomparso:

Dopo l'aggiornamento, il problema è scomparso

Lascio questa domanda qui per coloro che avranno questo problema in futuro.


11
No, utilizzo Android Studio 1.2 RC 2 e ricevo ancora questo errore.
IgorGanapolsky

Vedi la mia risposta qui sotto @IgorGanapolsky
gbero

Sono su Android Studio 2.2 e sto ancora ricevendo il problema
Ab


5

Ho fatto quello che ha detto @ang_lee e ho anche aggiunto questa riga allo stile del tema dell'app:

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

sto usando la versione 26.0.1:

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

strumenti di costruzione:

buildToolsVersion "26.0.1"

Ho dovuto aggiungere anche questo:<item name="windowNoTitle">true</item
Mario Velasco

2

Ho avuto lo stesso errore sullo schermo del mio Android Studio quando volevo visualizzare in anteprima il mio progetto. Risolvo il problema in questo modo:

1- Ho cambiato la versione dalla 22 alla 21. Ma se torno alla versione 22, il rendering si interrompe, se torno alla 21, funziona di nuovo. Grazie @Overloaded_Operator

Ho aggiornato il mio Android Studio ma non funziona. Grazie @ Salvuccio96


1

nessuno dei precedenti ha funzionato per me, ho aggiornato la versione appCompat - v7 nel file gradle della mia app dal 23 al 25.3.1. ha contribuito a farlo funzionare per me


1

Trova styles.xml nella cartella app / res / values.

Nell'attributo principale dello stile potrebbe mancare "Base". Dovrebbe iniziare come

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

0

Ho avuto lo stesso errore. Alla fine ho ricevuto questo avviso che un plug-in non era aggiornato:

finestra di dialogo di errore

Dopo aver aggiornato, il problema è andato via.


0

Le soluzioni di cui sopra non mi hanno aiutato. Ho provato i primi 2 passaggi da questo collegamento . Ha funzionato bene per me. Ma non dimenticare di farlo

import com.melnykov.fab.FloatingActionButton; 

invece di

import android.support.design.widget.FloatingActionButton;

nel tuo MainActivity.java


0

Uso Android Studio 2.3.3: - Apri styles.xml - Android Studio mostrerà una notifica in alto a destra con due opzioni: "apri editor" e "Nascondi notifica". - Fai clic su "apri editor" - Sotto il menu a discesa principale del tema, fai clic su mostra tutti i temi - Seleziona un tema che inizia con AppCompat ... (ho usato AppComat.DayNight)

NB: se la barra del titolo scompare, è necessario estendere AppCompatActivity invece di Activity.

Ti auguro il meglio!


0

Ho avuto lo stesso problema per una delle attività nella mia app, una delle cause di questo problema è che il tema nell'editor del tema potrebbe essere diverso dal tema definito in 'styles.xml'.change the Theme nell'editor del tema al tuo 'Apptheme' o al tuo tema personalizzato (se lo hai definito). In questo modo ho risolto il mio problema.


0

Il mio problema è stato risolto anche modificando styles.xml

<!-- Base application theme. -->
<style name="AppTheme" parent="Base.Theme.AppCompat.Light.DarkActionBar">
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.