无法实例化以下类:-android.support.v7.widget.Toolbar


104

我正在使用Android Lollipop(5.0)中使用的新Material Design创建一个应用程序。

我正在使用以下指南:

创建工具栏后,出现以下错误:“无法实例化以下类:-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代码(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>

目前,我使用的是Android Studio Beta 0.8.9


尝试更新android studio。最新版本是0.8.14。它可能具有用于Toolbar渲染的更新。
安东·霍洛文

谢谢,解决方案是更新Android Studio。
firespacexyz 2014年

我遇到了类似的问题,并通过以下操作解决了这个问题:stackoverflow.com/a/33903057/1214729
维克多·奥古斯托

Answers:


96

对于Android Studio(或IntelliJ IDEA),

如果项目中的所有内容看起来都还不错,并且您在所有布局中仍然收到错误,请尝试“使缓存无效并重新启动”。

等待Android Studio完成创建所有缓存和索引的操作。

如何使缓存无效并重新启动


谢谢。这个答案帮助了我。
哈希

这实际上帮助了我..它很奇怪,我们必须这样做,但是谢谢@gbero
MetaSnarf 2015年

2
这通常是在更新Android Studio之后发生的。可能是某些内部索引转错了……
gbero 2015年

1
注意:这会删除您的“本地历史记录”,因此有点极端。Android Studio 2.2.3在UI预览日志对话框中具有“清除缓存”链接,请首先尝试执行此操作,但这两种解决方案都不适合我。
fishjd

1
没有为我工作,我将appCompat-v7版本从23更新到25.3.1。帮助使它对我
有用

164

我从此更改了res / values / styles.xml文件:

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

对此:

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

这样就解决了问题。


3
在其他两个解决方案失败之后,这个解决方案对我有用。
我曾经摔过一只熊。

9
此解决方案的逻辑是什么
blackHawk

哇!。我真的很想知道为什么尽管有人请您解释一下?
无效

2
怎么样NoActionBarBase。替代Theme.AppCompat.NoActionBar什么?
马里奥·贝拉斯科

1
它对我有用,但是如果您看一下声明它的代码本身,则有注释表明您可能不应该引用Base.Theme。无论您的应用程序是什么。因此,我想这不是预期的行为。
JoeHz

35

我做了@gbero所说的,然后我将Studio使用的Android版本号从22更改为17,并且可以使用。

我正在使用向后兼容性为Android版本22构建,但以目标版本17为目标(idk,如果正确地说,我仍然想弄清楚这个应用程序的东西),从而触发了向后兼容性,即afaik是什么android.support.v7.*。这可能是其渲染代码存在的错误。不确定是否需要按上述建议清除缓存,因为在使缓存无效后渲染仍无法正常工作,而是在我将版本更改为渲染后才开始工作。如果改回版本22,则渲染会中断;如果切换回17,则渲染会再次起作用。

我的解决办法


我面临着同样的问题,我已经做了一切,但是我的问题尚未解决。我该如何解决?
Atiar Talukdar 2015年

1
对不起,我的回复很晚,我的目标是API版本17,如果您的目标是16,那么切换到16、17仍然是错误的版本。我很难使这个该死的IDE正常工作,我只是开始使用命令行。与Visual Studio一样,它们都是经过过度设计的,它们成为负担,而不是工具。
Overloaded_Operator

更改API级别并更新某些文件后,我的问题已解决。在
此先

@Overloaded_Operator如果您的minSdkVersion版本是17,我建议在具有API级别17的仿真器或具有API级别17的实际设备上运行该应用程序,并确认UI是否按预期显示,而不是与Android Studio中呈现的外观相同
John


12

可能具有相同效果的另一个错误可能是预览中的主题错误。由于某种原因,我在这里选择了其他主题。选择我的AppTheme之后,它再次正常运行:

布局选项


这对我有用。但是我们如何知道选择哪个主题。我是Android的初学者
Menuka Ishan

1
您应该选择与为使用布局文件的活动指定的主题相同的主题。它通常在AndroidManifest.xml设置和在res /值/ styles.xml或RES定义/值/的themes.xml
的BjörnKechel

谢谢:)我的测试应用程序中没有themes.xml,但主题位于AndroidManifest.xml中。但是我不禁要问,如果它会出错,为什么他们会给出改变它的选择呢?如果应在xml中进行编辑,为什么只在此处显示它(如“文本”),而不是在更改主题的选项上显示它呢?初学者会被误导
Menuka Ishan

1
您可能应该通读开发人员文档:developer.android.com/guide/topics/ui/themes.html除了主题之外,它们还涵盖了初学者所需的大多数内容。
比约恩·凯歇尔(BjörnKechel)2016年

9

很抱歉,如果我回答自己,但是最后,我的问题的解决方案是通过Canary Channel将Android Studio更新到新版本0.8.14:http ://tools.android.com/recent/

更新后,问题消失了:

更新后,问题消失了

我将这个问题留给将来有这个问题的人。


11
不,我在Android Studio 1.2 RC 2上,仍然出现此错误。
IgorGanapolsky

请在下面查看我的答案@IgorGanapolsky
gbero 2015年

我在Android Studio 2.2中,我仍然得到问题
抗体


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

以上都不适合我,我将我的应用gradle文件中的appCompat-v7版本从23更新到25.3.1。帮助使它对我有用


1

在app / res / values文件夹中找到styles.xml。

样式的父属性可能缺少“基本”。它应该开始为

<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而不是Activity。

祝一切顺利!


0

我的应用程序中的一项活动遇到了相同的问题,导致此问题的原因之一是主题编辑器中的主题可能与'styles.xml'中定义的主题不同。在主题编辑器中更改主题您的“ Apptheme”或自定义定义的主题(如果已定义)。这样做解决了我的问题。


0

通过更改styles.xml也解决了我的问题

<!-- Base application theme. -->
<style name="AppTheme" parent="Base.Theme.AppCompat.Light.DarkActionBar">
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.