错误膨胀类 androidx.appcompat.widget.Toolbar android

我尝试在我的应用程序中使用工具栏并收到此消息:“错误膨胀类 androidx.appcompat.widget.Toolbar”。我很高兴有人能找到我的问题(使用最新版本的 android studio)

XML:

  <androidx.appcompat.widget.Toolbar
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:background="#00008577"
        android:minHeight="?actionBarTheme"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:navigationIcon="@drawable/main"
        android:id="@+id/toolbar"/>

爪哇:


    private Toolbar toolbar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        findViews();
        setSupportActionBar(toolbar);

    }

    private void findViews() {
        drawer_layout = findViewById(R.id.drawer_layout);
        nav_view = findViewById(R.id.nav_view);
        toolbar = findViewById(R.id.toolbar);
    }

风格: <style name="AppTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar">

收到异常

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.or.ourshoppinglist/com.or.ourshoppinglist.MainActivity}: android.view.InflateException: Binary XML file line #28: Binary XML file line #28: Error inflating class <unknown>
stack overflow Error inflating class androidx.appcompat.widget.Toolbar android
原文答案

答案:

作者头像

嗨 noa shen,欢迎来到 Stackoverflow。

首先,您的工具栏导入可能存在问题。自从 android 版本出现以来,你得到了两个版本的工具栏:

androidx.appcompat.widget.Toolbar

android.support.v7.widget.Toolbar

所以首先在你的 JAVA.class 中检查你的导入,看看你是否导入了正确的版本:

androidx.appcompat.widget.Toolbar

除此之外,为什么你的工具栏宽度等于 0?

<androidx.appcompat.widget.Toolbar
    android:layout_width="0dp"

同样要使用工具栏,您需要将其粘贴到您的构建 Gradle 文件中的依赖项中:

implementation 'androidx.appcompat:appcompat:1.0.0'

如果这不能解决任何问题,请提供您的整个 XML、JAVA.class 和您的异常的完整堆栈跟踪。

作者头像

添加了我的整个 XML

<androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:context=".MainActivity"
    tools:openDrawer="start">

    <com.google.android.material.navigation.NavigationView
        android:id="@+id/nav_view"
        android:layout_gravity="start"
        android:layout_height="match_parent"
        android:layout_width="wrap_content"
        app:headerLayout="@layout/header"
        app:menu="@menu/main_menu" />

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="match_parent">
<androidx.constraintlayout.widget.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#FFFFFF">

    <androidx.appcompat.widget.Toolbar
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:background="#00008577"
        android:minHeight="?actionBarTheme"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:navigationIcon="@drawable/main"
        android:id="@+id/toolbar"/>

</androidx.constraintlayout.widget.ConstraintLayout>

</ScrollView>

</androidx.drawerlayout.widget.DrawerLayout>

爪哇:

package com.or.ourshoppinglist;

import androidx.appcompat.app.ActionBarDrawerToggle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.drawerlayout.widget.DrawerLayout;

import android.os.Bundle;

import com.google.android.material.navigation.NavigationView;

public class MainActivity extends AppCompatActivity {

    private DrawerLayout drawer_layout;
    private NavigationView nav_view;
    private Toolbar toolbar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        findViews();
        setSupportActionBar(toolbar);

        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer_layout,toolbar,R.string.navigation_drawer_open,R.string.navigation_drawer_close);
        drawer_layout.addDrawerListener(toggle);
        toggle.syncState();
    }

    private void findViews() {
        drawer_layout = findViewById(R.id.drawer_layout);
        nav_view = findViewById(R.id.nav_view);
        toolbar = findViewById(R.id.toolbar);
    }
}
作者头像

build.gradle (module app) 文件中,升级版本 : implementation 'androidx.appcompat:appcompat:1.4.1' 的实现导致了我的错误。当我使用 implementation 'androidx.appcompat:appcompat:1.0.0' 时,错误消失了。

作者头像

我通过使用 android:backgroundapp:srcCompat 更改为 ?android:attr 来解决此问题。