setSupportActionBar 工具栏无法应用到 (android.widget.Toolbar) 错误

Posted

技术标签:

【中文标题】setSupportActionBar 工具栏无法应用到 (android.widget.Toolbar) 错误【英文标题】:setSupportActionBar toolbar cannot be applied to (android.widget.Toolbar) error 【发布时间】:2015-05-15 13:33:29 【问题描述】:

我一直在寻找答案,并尝试了许多可能的解决方案,但似乎没有任何效果..

我正在尝试在this tutorial 之后设置一个 Material Action Bar。

这是我的代码:

tool_bar.xml:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_
    android:background="@color/ColorPrimary"
    android:elevation="4dp">

</android.support.v7.widget.Toolbar>

activity.xml:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/drawer_layout"
    android:layout_
    android:layout_
    android:background="#FFFFFF">
    <!-- The main content view -->
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_
        android:layout_
        android:orientation="vertical">

        <include
            android:id="@+id/app_bar"
            layout="@layout/tool_bar" />
    </RelativeLayout>
    <!-- Navigation Drawer -->
    <ListView
        android:id="@+id/left_drawer"
        android:layout_
        android:layout_
        android:layout_gravity="left"
        android:background="#1C1C1C"
        android:divider="@android:color/darker_gray"
        android:dividerHeight="1dp" />

</android.support.v4.widget.DrawerLayout>

最后是我的activity.java:

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


public class rutaActivity extends ActionBarActivity 

private Toolbar toolbar;
    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_ruta);

        getSupportActionBar().hide();//Ocultar ActivityBar anterior

        toolbar = (Toolbar) findViewById(R.id.app_bar);
        setSupportActionBar(toolbar); //HERE'S THE PROBLEM !!!!

错误:

ActionBarActivity中的setSupporActionBar(android.support.v7.widget.Toolbar)不能应用到(android.widget.Toolbar)

我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

在您的Activity.java 中导入android.support.v7.widget.Toolbar 而不是android.widget.Toolbar

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


public class rutaActivity extends AppCompactActivity 

private Toolbar toolbar;
@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_ruta);

    getSupportActionBar().hide();//Ocultar ActivityBar anterior

    toolbar = (Toolbar) findViewById(R.id.app_bar);
    setSupportActionBar(toolbar); //NO PROBLEM !!!!

更新:

如果您使用的是androidx,请替换

import android.support.v7.widget.Toolbar;
import android.support.v7.app.AppCompatActivity;

使用更新的导入

import androidx.appcompat.widget.Toolbar;
import androidx.appcompat.app.AppCompatActivity;

【讨论】:

使用 AppCompatActivity 而不是 ActionBarActivity,因为 Google 已经对其进行了贬值。 当我在 android 类中使用工具栏时扩展 actionbaractivity setsupportActionBar(tool) 显示错误 setsupport toolbar v7 appdelegar 错误请帮助我【参考方案2】:

在使用工具栏时,您应该扩展 AppCompatActivity 和

import android.support.v7.widget.Toolbar 

【讨论】:

Extends AppCompatActivity 给了我我遗漏的线索。【参考方案3】:

要添加支持 Material Design 的 ToolBar,official documentation directions 可能是最好的选择。

    添加v7 appcompat support library。

    让你的活动扩展AppCompatActivity

    public class MyActivity extends AppCompatActivity 
      // ...
    
    

    在 Manifest 中声明 NoActionBar

    <application
        android:theme="@style/Theme.AppCompat.Light.NoActionBar"
        />
    

    将工具栏添加到 Activity 的 xml 布局中。

    <android.support.v7.widget.Toolbar
       android:id="@+id/my_toolbar"
       android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
       ...
       />
    

    在活动的onCreate 中调用setSupportActionBar

    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);
        Toolbar myToolbar = (Toolbar) findViewById(R.id.my_toolbar);
        setSupportActionBar(myToolbar);
    
    

注意:您必须在活动中导入以下内容。

import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;

【讨论】:

忘记扩展 AppCompatActivity 并在 setSupportActionBar 上获得未解决的引用。谢谢! @AbhinavSaxena 停止向其他人的答案发送垃圾邮件,其中包含指向另一个答案的链接。【参考方案4】:

对于 3 以上的 Android 版本:

import androidx.appcompat.widget.Toolbar;

对于 3 以下的 Android 版本:

import android.widget.Toolbar;

【讨论】:

【参考方案5】:

随着在 Studio 3.0+ 中添加 androidx,工具栏兼容性现在在一个新库中,可以像这样访问

import androidx.appcompat.widget.Toolbar

【讨论】:

【参考方案6】:

确认您的 Manifest 声明包含 android:theme="@style/AppTheme.NoActionBar" 标记,如下所示:

<activity
    android:name=".PointsScreen"
    android:theme="@style/AppTheme.NoActionBar">
</activity>

【讨论】:

【参考方案7】:

将 import android.support.v7.widget.Toolbar 添加到导入列表可解决此问题。

然后添加工具栏小部件布局文件:

<android.support.v7.widget.Toolbar
    android:id="@+id/list_toolbar"
    android:layout_
    android:layout_
    android:background="?attr/colorPrimary"
    android:minHeight="?attr/actionBarSize"
    android:theme="?attr/actionBarTheme"
    />

在java代码的onCreate方法中

//call to

Tootbar 工具栏 = findViewById(R.id.toolbar); setSupportActionBar(工具栏);

来源:https://developer.android.com/training/appbar/up-action

【讨论】:

这无济于事。 试过了,对我有用。注意import语句import android.support.v7.widget.Toolbar和工具栏【参考方案8】:

类必须是AppCompatActivity的扩展才能解决setSuppertActionBar无法识别的问题

【讨论】:

这真是天才!【参考方案9】:

只是改变

import android.widget.Toolbar;

import android.support.v7.widget.Toolbar;

【讨论】:

【参考方案10】:

工具栏的名称可以使用

轻松更改
android:label="My Activity"

在您的清单文件中。 我只是通过 Manifest 并找到了

android:label 

帮助根据具体活动改变,希望大家试一试

【讨论】:

这是我发现的最复杂的方法,对你有帮助吗?【参考方案11】:

我以前使用过这段代码:

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

也扩展了 AppCompatActivity,但我遇到了同样的错误。 因此,代替使用 Toolbar 类,我导入了以下类,它对我有用:

android.support.v7.widget.Toolbar

【讨论】:

【参考方案12】:
import android.support.v7.widget.Toolbar;

将其导入您的 java 类

【讨论】:

【参考方案13】:

在你MainActivity.java中导入android .support.v7.widget.Toolbar插入的java程序

【讨论】:

以上是关于setSupportActionBar 工具栏无法应用到 (android.widget.Toolbar) 错误的主要内容,如果未能解决你的问题,请参考以下文章

恢复片段时使用 setSupportActionBar() 设置工具栏

如何在 android studio 中使用 setSupportActionBar 功能?

无法解析资源@style.AppTheme.AppBarOverlay [重复]

无法解析扩展 FragmentActivity 的类中的方法 getActivity()

不再需要 setSupportActionbar 了吗?

setsupportactionbar() 抛出错误