Nie można utworzyć instancji następujących klas: - android.support.v7.widget.Toolbar

104

Tworzę aplikację z nowym Material Design używanym w Android Lollipop (5.0).

Korzystam z następujących poradników:

Po utworzeniu paska narzędzi pojawia się następujący błąd: „Nie można utworzyć instancji następujących klas: - android.support.v7.widget.Toolbar”

Aplikacja działa dobrze na telefonie lub w emulatorze, ale projektant układu Android Studio nie wyświetla poprawnie układu.

Oto kilka zdjęć:

Błąd w podglądzie układu my_awesome_toolbar.xml błąd w my_awesome_toolbar.xml

Błąd w podglądzie układu activity_my.xml błąd w activity_my.xml

Kod xml plików:

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

kod xml stylów (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>

W tej chwili używam Android Studio Beta 0.8.9

firespacexyz
źródło
Spróbuj zaktualizować Android Studio. Ostatnia wersja to 0.8.14. Może zawierać aktualizacje do Toolbarrenderowania.
Anton Holovin
Dzięki, rozwiązaniem była aktualizacja Android Studio.
firespacexyz
Miałem podobny problem i naprawiłem go, wykonując następujące czynności: stackoverflow.com/a/33903057/1214729
Victor Augusto

Odpowiedzi:

96

W przypadku Android Studio (lub IntelliJ IDEA),

Jeśli wszystko wygląda dobrze w Twoim projekcie i nadal otrzymujesz błąd we wszystkich swoich układach, spróbuj „Unieważnij pamięć podręczną i uruchom ponownie”.

Poczekaj, aż Android Studio zakończy tworzenie wszystkich pamięci podręcznych i indeksów.

jak unieważnić pamięć podręczną i zrestartować

gbero
źródło
Dzięki Ta odpowiedź pomogła mi.
haszysz
to faktycznie pomogło mi ... to dziwne, że musielibyśmy to zrobić, ale dzięki @gbero
MetaSnarf
2
zdarzało mi się to zwykle po aktualizacji Android Studio. Prawdopodobnie jakieś wewnętrzne indeksy się mylą ...
gbero
1
Uwaga: spowoduje to usunięcie Twojej „historii lokalnej”, więc będzie to trochę ekstremalne. Android Studio 2.2.3 ma łącze „wyczyść pamięć podręczną” w oknie dialogowym dziennika podglądu interfejsu użytkownika. Spróbuj najpierw tego, ale żadne z rozwiązań nie zadziałało.
fishjd
1
Nie działa dla mnie, zaktualizowałem appCompat - wersja v7 z 23 do 25.3.1. pomogło to zrobić dla mnie
Antroid
164

Zmieniłem plik res / values ​​/ styles.xml z tego:

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

do tego:

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

i to rozwiązało problem.

Ang Lee
źródło
3
Po tym, jak pozostałe dwa rozwiązania zawiodły, to zadziałało.
Kiedyś walczyłem z niedźwiedziem.
9
Jaka jest logika dla tego rozwiązania
blackHawk
To zadziałało wow! . Naprawdę chcę wiedzieć, dlaczego, chociaż proszę kogoś o wyjaśnienie?
nieważne
2
A co z NoActionBarw Base. Jaki jest zamiennik Theme.AppCompat.NoActionBar?
Mario Velasco,
1
U mnie zadziałało, ale jeśli spojrzysz na sam kod, który to deklaruje, są komentarze, które mówią, że prawdopodobnie NIE powinieneś odwoływać się do Base.Theme.Cokolwiek w swojej aplikacji. Więc powiedziałbym, że NIE jest to oczekiwane zachowanie.
JoeHz
35

Zrobiłem to, co powiedział @gbero i zmieniłem numer wersji Androida, z którego korzysta Studio, z 22 na 17 i to działa.

Używam kompatybilności wstecznej do kompilacji dla Androida w wersji 22, ale do celu 17 (idk, jeśli to poprawnie powiedziane, nadal próbuję rozgryźć tę aplikację), aby wyzwolić kompatybilność wsteczną, którą afaik jest tym, co android.support.v7.*jest. Prawdopodobnie jest to błąd związany z ich kodem renderującym. Nie jestem pewien, czy wyczyszczenie pamięci podręcznej zgodnie z powyższą sugestią było konieczne, ponieważ renderowanie nie działało zaraz po unieważnieniu pamięci podręcznej, zaczęło działać po zmianie wersji do renderowania. Jeśli powrócę do wersji 22, renderowanie się zepsuje, jeśli przełączę się z powrotem na 17, to znowu działa.

moja poprawka

Overloaded_Operator
źródło
Mam ten sam problem, już wszystko zrobiłem, ale mój problem nie został jeszcze rozwiązany. Jak mogę to rozwiązać?
Atiar Talukdar
1
Przepraszam za spóźnioną odpowiedź, celowałem w API w wersji 17, jeśli celujesz, powiedzmy, 16, to przełącz się na 16, 17 nadal będzie złą wersją. Miałem tyle problemów z uruchomieniem tego cholernego IDE, że właśnie zacząłem używać wiersza poleceń. To samo z Visual Studio, oba są zbyt zaawansowane i stają się obciążeniem, a nie narzędziem.
Overloaded_Operator
Mój problem został rozwiązany po zmianie poziomu API i aktualizacji niektórych plików. Dzięki z góry
Atiar Talukdar
@Overloaded_Operator Jeśli twoja minSdkVersionwersja to 17, sugerowałbym uruchomienie aplikacji na emulatorze z poziomem API 17 lub rzeczywistym urządzeniu z poziomem API 17 i potwierdzić, czy interfejs użytkownika wygląda zgodnie z oczekiwaniami, a nie tak, jak jest renderowany w Android Studio
Jan
12

Innym błędem, który może mieć ten sam efekt, może być niewłaściwy motyw w podglądzie. Z jakiegoś powodu wybrałem tutaj inny motyw. Po wybraniu mojego AppTheme znowu działało dobrze:

opcje układu

Björn Kechel
źródło
To zadziałało dla mnie. Ale skąd wiemy, który motyw wybrać. Jestem początkującym użytkownikiem Androida
Menuka Ishan
1
Powinieneś wybrać ten sam motyw, który został określony dla działania korzystającego z pliku układu. Często jest ustawiany w AndroidManifest.xml i definiowany w res / values ​​/ styles.xml lub res / values ​​/ themes.xml
Björn Kechel
Dziękuję :) W mojej aplikacji testowej nie ma pliku themes.xml, ale motyw znajdował się w AndroidManifest.xml. Ale nie mogę się powstrzymać od zastanawiania się, dlaczego, do cholery, dają możliwość zmiany tego, skoro ma to spowodować błąd? Jeśli powinien być edytowany w formacie XML, po co tylko pokazywać go w odpowiednim miejscu, jak tekst, ale nie jako opcja zmiany motywu? Początkujący
pomyliłby się
1
Prawdopodobnie powinieneś trochę przeczytać dokumentację dla programistów : developer.android.com/guide/topics/ui/themes.html Oprócz motywów obejmują one większość rzeczy, których potrzebuje początkujący.
Björn Kechel
9

Przepraszam, jeśli sobie odpowiadam, ale w końcu rozwiązaniem mojego problemu była aktualizacja Android Studio do nowej wersji 0.8.14 przez Canary Channel: http://tools.android.com/recent/

Po aktualizacji problem zniknął:

Po aktualizacji problem zniknął

To pytanie zostawiam tutaj dla tych, którzy będą mieli ten problem w przyszłości.

firespacexyz
źródło
11
Nie, korzystam z Androida Studio 1.2 RC 2 i nadal otrzymuję ten błąd.
Igor Ganapolsky
Zobacz moją odpowiedź poniżej @IgorGanapolsky
gbero
Jestem na Android Studio 2.2, a ja wciąż się problem
Ab
5
  1. Czysty projekt
  2. Przebuduj projekt
  3. Synchronizuj Gradle

to działa dla mnie

Taioli Francesco
źródło
5

Zrobiłem to, co powiedział @ang_lee, a także dodałem tę linię do stylu motywu aplikacji:

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

używam wersji 26.0.1:

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

narzędzia budowlane:

buildToolsVersion "26.0.1"
AymAn AbuOmar
źródło
Musiałem też dodać to:<item name="windowNoTitle">true</item
Mario Velasco
2

Miałem ten sam błąd na moim ekranie Android Studio, gdy chciałem obejrzeć mój projekt. Rozwiązuję problem w ten sposób:

1- Zmieniam wersję z 22 na 21. Ale jeśli powrócę do wersji 22, renderowanie się zepsuje, jeśli przełączę się z powrotem na 21, znowu działa. Dziękuję @Overloaded_Operator

Zaktualizowałem Android Studio, ale nie działa. Dziękuję @ Salvuccio96

kilian agboton
źródło
1

żadna z powyższych nie działała dla mnie, zaktualizowałem wersję appCompat - v7 w moim pliku gradle aplikacji z 23 do 25.3.1. pomogło to zrobić dla mnie

Antroid
źródło
1

Znajdź style.xml w folderze app / res / values.

W atrybucie nadrzędnym stylu może brakować wartości „Podstawowy”. Powinien zaczynać się jako

<style name="AppTheme" parent="Base.Theme.AppCompat...
dp2050
źródło
0

Miałem ten sam błąd. W końcu dostałem powiadomienie, że wtyczka jest nieaktualna:

okno dialogowe błędu

Po aktualizacji problem zniknął.

James Moore
źródło
0

Powyższe rozwiązania mi nie pomogły. Wypróbowałem 2 pierwsze kroki z tego linku . U mnie działało dobrze. Ale nie zapomnij

import com.melnykov.fab.FloatingActionButton; 

zamiast

import android.support.design.widget.FloatingActionButton;

w swoim MainActivity.java

WishMaster
źródło
0

Używam Android Studio 2.3.3: - Otwórz styles.xml - Android Studio wyświetli powiadomienie w prawym górnym rogu z dwiema opcjami: „Otwórz edytor” i „Ukryj powiadomienie”. - Kliknij „Otwórz edytor” - W rozwijanym menu nadrzędnym motywów kliknij opcję Pokaż wszystkie motywy - Wybierz dowolny motyw zaczynający się od AppCompat ... (użyłem AppComat.DayNight)

NB: Jeśli pasek tytułu zniknie, musisz rozszerzyć AppCompatActivity zamiast Activity.

Wszystkiego najlepszego!

Norman Pilusa
źródło
0

Miałem ten sam problem w przypadku jednego z działań w mojej aplikacji, jedną z przyczyn tego problemu jest to, że motyw w edytorze motywów może być inny niż motyw zdefiniowany w pliku „styles.xml”. Zmień motyw w edytorze motywów do swojego „Appthemu” lub niestandardowego motywu zdefiniowanego (jeśli zdefiniowałeś). To rozwiązało mój problem.

WizWarrior
źródło
0

Mój problem został również rozwiązany poprzez zmianę w styles.xml

<!-- Base application theme. -->
<style name="AppTheme" parent="Base.Theme.AppCompat.Light.DarkActionBar">
abir99
źródło