Неможливо створити такі класи: - android.support.v7.widget.Toolbar


104

Я створюю додаток з новим дизайном матеріалів, який використовується в Android Lollipop (5.0).

Я використовую такі посібники:

Після створення моєї панелі інструментів я отримую цю помилку: "Не вдалося інстанціювати такі класи: - android.support.v7.widget.Toolbar"

Додаток добре працює в телефоні чи емуляторі, але дизайнер макетів Android Studio не відображає макет правильно.

Ось деякі зображення:

Помилка в попередньому перегляді макета my_awesome_toolbar.xml помилка в my_awesome_toolbar.xml

Помилка в попередньому перегляді макета Activity_my.xml помилка в Activity_my.xml

XML-код файлів:

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

XML-код стилів (значень / 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>

На даний момент я використовую Android Studio Beta 0.8.9


Спробуйте оновити студію Android. Остання версія - 0.8.14. Він може мати оновлення для Toolbarвізуалізації.
Антон Головін

Спасибі, рішенням було оновлення Android Studio.
firespacexyz

У мене виникла подібна проблема, яку виправили, дотримуючись цього: stackoverflow.com/a/33903057/1214729
Віктор Аугусто

Відповіді:


96

Для Android Studio (або IntelliJ IDEA),

Якщо у вашому проекті все виглядає нормально, і ви все ще отримуєте помилку у всіх своїх макетах, спробуйте "Недійсні кеші та перезапуск".

Зачекайте, поки Android Studio закінчить, щоб створити всі кеші та індекси.

як визнати недійсним кеш і перезапустити


Дякую. Ця відповідь мені допомогла.
хеш

це насправді допомогло мені ... це дивно, що нам доведеться це робити, але дякую @gbero
MetaSnarf

2
це траплялося зі мною зазвичай після оновлення Android Studio. Можливо, деякі внутрішні індекси виявляються помилковими ...
gbero

1
Примітка: це видалить вашу "краєзнавчу історію", тому це трохи екстремально. Android Studio 2.2.3 має посилання "очистити кеш" у діалоговому вікні журналу попереднього перегляду користувальницького інтерфейсу, спробуйте це спочатку, але жодне рішення не працювало для мене.
fishjd

1
Не працював для мене, я оновив версію appCompat - v7 з 23 до 25.3.1. допомогли змусити мене працювати
Antroid

164

Я змінив файл res / values ​​/ styles.xml з цього:

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

до цього:

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

і це вирішило проблему.


3
Після того, як інші два рішення не вдалися, це працювало для мене.
Я боровся ведмедя одного разу.

9
Яка

Це працювало вау! . Я дуже хочу знати, чому, будь ласка, хтось піклується про пояснення?
недійсна

2
Про що NoActionBarв Base. Що таке заміна Theme.AppCompat.NoActionBar?
Маріо Веласко

1
Це працювало для мене, але якщо ви подивитесь на сам код, який декларує його, є коментарі, які говорять про те, що ви, ймовірно, НЕ повинні посилатися на Base.Theme. Незалежно від програми. Тому я б сказав, що це НЕ очікувана поведінка.
JoeHz

35

Я зробив те, що сказав @gbero, і змінив номер версії Android, який використовує Studio, з 22 на 17, і це працює.

Я використовую сумісність для зворотного зв'язку для створення версії для Android ver 22, але для націлювання на 17 (idk, якщо це правильно сказано, я все ще намагаюся розібратися в цьому додатку), щоб це викликало зворотну сумісність, що afaik - що це android.support.v7.*таке. Це, ймовірно, помилка з кодом їх візуалізації. Не впевнений, чи потрібне очищення кеша, як було запропоновано вище, оскільки візуалізація не спрацювала відразу після виведення з ладу кеша, він почав працювати після того, як я змінив версію на візуалізацію. Якщо я повернусь до версії 22, візуалізація порушується, якщо я переключусь на 17, вона знову працює.

моє виправлення


Я зіткнувся з тією ж проблемою, я вже все зробив, але моя проблема ще не вирішена. Як я можу це вирішити?
Atiar Talukdar

1
Вибачте за пізню відповідь, я націляв API версії 17, якщо ви орієнтуєтесь, скажімо, 16, то перехід на 16, 17 все одно буде неправильною версією. У мене було стільки проблем з тим, щоб ця проклята IDE працювати, я просто почав використовувати командний рядок. Точно так само і з Visual Studio, вони обоє перероблені, і вони стають тягарем, а не інструментом.
Перевантажений_Оператор

Моя проблема вирішена після зміни рівня API та оновлення деяких файлів. Заздалегідь
дякую

@Overloaded_Operator Якщо вашої minSdkVersionверсії 17, я б запропонував запустити додаток на емуляторі з рівнем API 17 або на фактичному пристрої з рівнем API 17 та підтвердити, чи користувацький інтерфейс виглядає як очікувалося, а не як те, що відображається в Android Studio
Джон


12

Ще одна помилка, яка може мати той же ефект, може бути неправильною темою у попередньому перегляді. Я чомусь обрав тут якусь іншу тему. Вибравши свою програму AppTheme, вона знову спрацювала нормально:

варіанти компонування


Це працювало для мене. Але як ми знаємо, яку тему вибрати. Я початківець в Android
Menuka Ishan

1
Ви повинні вибрати ту саму тему, яку ви вказали для діяльності, яка використовує файл компонування. Він часто встановлюється в AndroidManifest.xml і визначається у res / values ​​/ styles.xml або res / values ​​/ themes.xml
Björn Kechel

Дякую :) У моїй програмі для тестування немає themes.xml, але тема була в AndroidManifest.xml. Але я не можу не задатись питанням, чому, пекло, вони дають можливість змінити це, якщо він буде робити помилку? Якщо він повинен бути відредагований у xml, чому просто показувати його там правильно, як текст, але не як варіант змінити тему? Початківець
помилився

1
Напевно, ви повинні трохи прочитати документи розробника: developer.android.com/guide/topics/ui/themes.html Крім тем, вони охоплюють більшість речей, які потребують початківця.
Бьорн Кечел

9

Вибачте, якщо я відповідаю собі, але, нарешті, рішенням моєї проблеми було оновлення Android Studio на нову версію 0.8.14 від каналу Canary Channel: http://tools.android.com/recent/

Після оновлення проблему немає:

Після оновлення проблема відсутня

Це питання я залишаю тут для тих, хто має цю проблему в майбутньому.


11
Ні, я перебуваю на Android Studio 1.2 RC 2 і все ще отримую цю помилку.
ІгорГанапольський

Дивіться мою відповідь нижче @IgorGanapolsky
gbero

Я на Android Studio 2.2 і я все ще отримую проблему
Ab


5

Я зробив те, що сказав @ang_lee, а також додав цей рядок до стилю теми додатка:

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

я використовую версію 26.0.1:

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

будівельний інструмент:

buildToolsVersion "26.0.1"

Мені довелося додати ще й це:<item name="windowNoTitle">true</item
Mario Velasco

2

У мене була така ж помилка на екрані Android Studio, коли я хотів переконати проект. Я вирішую проблему такими способами:

1- Я змінюю версію з 22 на 21. Але якщо я повернусь до версії 22, візуалізація порушується, якщо я переключусь на 21, вона знову працює. Дякую @Overloaded_Operator

Я оновив свою Android Studio, але не працював. Дякую @ Salvuccio96


1

ніщо з вищезгаданого не працювало для мене, я оновив версію appCompat - v7 у моєму файлі gradle з 23 до 25.3.1. допомогли змусити мене це працювати


1

Знайдіть styles.xml у папці app / res / values.

Батьківський атрибут стилю може бути відсутнім "Base". Починати слід так

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

0

У мене була така ж помилка. Врешті-решт я отримав це повідомлення про те, що плагін застарів:

діалог помилок

Після оновлення проблема усунулася.


0

Наведені вище рішення мені не допомогли. Я спробував 2 перші кроки з цього посилання . Добре працював для мене. Але не забувайте

import com.melnykov.fab.FloatingActionButton; 

замість

import android.support.design.widget.FloatingActionButton;

у вашому MainActivity.java


0

Я використовую android studio 2.3.3: - Відкрити styles.xml - Android studio покаже сповіщення вгорі праворуч із двома параметрами: "відкрити редактор" та "Сховати сповіщення". - Клацніть "Відкрити редактор" - У спадному меню батьківського меню, натисніть Показати всі теми - Виберіть будь-яку тему, починаючи з AppCompat ... (я використовував AppComat.DayNight)

Примітка: Якщо ваша заголовка зникає, вам потрібно розширити AppCompatActivity замість діяльності.

Всього найкращого!


0

У мене була така ж проблема для одного з дій у моєму додатку, одна з причин цієї проблеми полягає в тому, що Тема в редакторі тем може бути іншою, ніж тема, визначена у 'styles.xml'.change Theme у редакторі тем до "Apptheme" або власної визначеної теми (якщо ви її визначили). Це вирішило мою проблему.


0

Моя проблема також була вирішена зміною в styles.xml

<!-- Base application theme. -->
<style name="AppTheme" parent="Base.Theme.AppCompat.Light.DarkActionBar">
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.