setSupportActionBar toolbar cannot be applied to (android.widget.Toolbar) 错误

setSupportActionBar toolbar cannot be applied to (android.widget.Toolbar) error

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

我正在尝试在 this tutorial 之后设置一个 Material 操作栏。

这是我的代码:

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_width="match_parent"
    android:layout_height="wrap_content"
    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_width="match_parent"
    android:layout_height="match_parent"
    android:background="#FFFFFF">
    <!-- The main content view -->
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <include
            android:id="@+id/app_bar"
            layout="@layout/tool_bar" />
    </RelativeLayout>
    <!-- Navigation Drawer -->
    <ListView
        android:id="@+id/left_drawer"
        android:layout_width="220dp"
        android:layout_height="match_parent"
        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 !!!!

错误:

setSupporActionBar (android.support.v7.widget.Toolbar) in ActionBarActivity cannot be applied to (android.widget.Toolbar)

我该如何解决这个问题?

在您的 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 和

import android.support.v7.widget.Toolbar 

要添加支持Material设计的工具栏,official documentation directions可能是最好的选择。

  1. 添加 v7 appcompat support library.
  2. 使您的 activity 扩展 AppCompatActivity

    public class MyActivity extends AppCompatActivity {
      // ...
    }
    
  3. 在清单中声明 NoActionBar

    <application
        android:theme="@style/Theme.AppCompat.Light.NoActionBar"
        />
    
  4. 向 activity 的 xml 布局添加工具栏。

    <android.support.v7.widget.Toolbar
       android:id="@+id/my_toolbar"
       android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
       ...
       />
    
  5. 在 activity 的 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);
    }
    

注意: 您必须在 activity.

中导入以下内容
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;

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

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

在您 MainActivity.java 导入 android .support.v7.widget.Toolbar 插入 java 程序

import android.support.v7.widget.Toolbar;

将其导入您的 java class

我之前使用的是这段代码:

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

并扩展了 AppCompatActivity,但我遇到了同样的错误。 因此,我没有使用 Toolbar class,而是导入了下面的 class,它对我有用:

android.support.v7.widget.Toolbar

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

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

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

在java代码的onCreate方法中

//call to

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

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

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

import androidx.appcompat.widget.Toolbar

对于3以上的Android版本:

import androidx.appcompat.widget.Toolbar;

对于Android版本3以下:

import android.widget.Toolbar;

class必须继承AppCompatActivity才能解决setSuppertActionBar无法识别的问题

改变一下

import android.widget.Toolbar;

import android.support.v7.widget.Toolbar;

可以使用

轻松更改工具栏的名称
android:label="My Activity"

在您的清单文件中。 我刚刚查看清单并找到

android:label 

根据具体情况帮助更改activity,希望大家试一试