完整报错信息:
Class referenced in the layout file, androidx.appcompat.widget.Toolbar, was not found in the project or the libraries 
Inspection info:If a class is referenced in the manifest or in a layout file, it must also exist in the project (or in one of the libraries included by the project. This check helps uncover typos in registration names, or attempts to rename or move classes without updating the XML references properly.  Issue id: MissingClass

整麻了..


问题描述:

为实现替换Android中的ActionBar->ToolBar,进行以下两步操作:

  1. 进入AndroidManifest.xml文件,按住Ctrl+鼠标左键进入android:theme="@style/Theme.(项目名)

        2.修改两个文件,变为:

<style name="Theme.(项目名)"parent="Theme.AppCompat.Light.NoActionBar">

或者No开头的那几个备选项。

然后,在布局文件toolbarlayout.xml(layout)中添加:

    <androidx.appcompat.widget.Toolbar
        android:id="@+id/tool_bar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    </androidx.appcompat.widget.Toolbar>

然后就报错了..


解决过程

于是我反手将 

androidx.appcompat.widget.Toolbar

改成了以下的内容,也就是说换了个包就不报错了。

android.widget.Toolbar

 但,他喵的,在MainActivity中报错了。

报错语句为下面第二个函数,大意是这个函数需要传入类型为

import android.support.v7.widget.Toolbar;
toolbar = findViewById(R.id.tool_bar);
setSupportActionBar(toolbar);

 索性,我将 toolbarlayout.xml(布局文件)中的toolbar也改成了:

<android.support.v7.widget.Toolbar
        android:id="@+id/tool_bar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true"
        android:layout_alignParentEnd="true"
        android:layout_centerHorizontal="true"
        android:layout_marginStart="2dp"
        android:layout_marginTop="16dp"
        android:layout_marginEnd="4dp"
        android:background="?attr/colorPrimary"
        android:titleTextColor="@color/black">
</android.support.v7.widget.Toolbar>

终于他nainai的不报错了,最后也运行了起来。

在这过程中,还遇到了一个“waiting for all target devices to come online”卡住不动的问题,下面的博客也解决了: 解决waiting for all target devices to come online卡住不动、长时间不加载的情况_锦鲤AI幸运的博客-CSDN博客icon-default.png?t=M85Bhttps://blog.csdn.net/qq_37700257/article/details/116236193

为了防止文章看起来云里雾里,我把涉及到的能运行的代码贴出来,这个项目是Android的一次关于ToolBar使用的实验。(我的安卓版本是7,1)

 

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <application
        android:allowBackup="true"
        android:dataExtractionRules="@xml/data_extraction_rules"
        android:fullBackupContent="@xml/backup_rules"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.Test4"
        tools:targetApi="31">

        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

            <meta-data
                android:name="android.app.lib_name"
                android:value="" />
        </activity>

        <activity
            android:name=".MainActivity2"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>

            <meta-data
                android:name="android.app.lib_name"
                android:value="" />
        </activity>
    </application>

</manifest>

Mainactivity2.java

package com.example.test4;

import android.annotation.SuppressLint;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.*;
import android.support.v7.widget.Toolbar;

public class MainActivity2 extends AppCompatActivity {
    private TextView show;
    private Toolbar toolbar;
    //记录菜单项
    private final static int MENU_PRINT = 0x0100;
    private final static int NEW_FILE = 0x0200;
    private final static int EXIT = 0x0300;

    @SuppressLint("ResourceType")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.toolbarlayout);

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

        //获取文本框
        show = findViewById(R.id.show);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        //菜单文件来自于res/menu/menus.xml
        getMenuInflater().inflate(R.menu.menus2, menu);
        return true;//return false it will not be shown
    }

    @SuppressLint("SetTextI18n")
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch(item.getItemId()){
            //通过id来辨别被点击的菜单选项
            case R.id.main_menu_0:
                show.setText("你点击了菜单项1,它的ID Number为"+item.getItemId());
                Toast.makeText(MainActivity2.this,item.getTitle(),Toast.LENGTH_LONG).show();
                break;
            case R.id.main_menu_1:
                show.setText("你点击了菜单项2,它的ID Number为:"+item.getItemId());
                Toast.makeText(MainActivity2.this,item.getTitle(),Toast.LENGTH_LONG).show();
                break;
            case R.id.main_menu_2:
                show.setText("你点击了菜单项3,它的ID Number为:"+item.getItemId());
                Toast.makeText(MainActivity2.this,item.getTitle(),Toast.LENGTH_LONG).show();
                finish(); break;
        }
        return super.onOptionsItemSelected(item);
    }




}

menu2.xml(在java文件 中引用)

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <!-- 选项1 -->
    <item
        android:id="@+id/main_menu_0"
        android:title="打印"
        app:showAsAction="always|withText"
        android:icon="@android:drawable/btn_star_big_off"
        android:orderInCategory="1"/>
    <!-- 选项2 -->
    <item
        android:id="@+id/main_menu_1"
        android:title="新建文件"
        app:showAsAction="always|withText"
        android:icon="@android:drawable/btn_star_big_on"
        android:orderInCategory="2" />

    <!-- 选项3 -->
    <item
        android:id="@+id/main_menu_2"
        android:title="退出"
        app:showAsAction="always"
        android:icon="@android:drawable/ic_menu_help"
        android:orderInCategory="3"/>
</menu>

以及主要的布局文件 toolbarlayout.xml :

    <?xml version="1.0" encoding="utf-8"?>
    <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"
        tools:context=".MainActivity2">

        <android.support.v7.widget.Toolbar
            android:id="@+id/tool_bar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_alignParentTop="true"
            android:layout_alignParentEnd="true"
            android:layout_centerHorizontal="true"
            android:layout_marginStart="2dp"
            android:layout_marginTop="16dp"
            android:layout_marginEnd="4dp"
            android:background="@color/purple_200"
            android:titleTextColor="@color/black">
        </android.support.v7.widget.Toolbar>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/tool_bar"
            android:layout_centerInParent="true"
            android:layout_marginLeft="28dp"
            android:layout_marginTop="445dp"
            android:text="Hello World!" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:layout_gravity="center"
            android:layout_marginTop="86dp"
            android:text="Android实验四ToolBar" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_alignParentTop="true"
            android:layout_gravity="center_vertical"
            android:layout_marginStart="54dp"
            android:layout_marginTop="150dp"
            android:text="用户名" />

        <EditText
            android:id="@+id/inname"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_alignParentTop="true"
            android:layout_gravity="center"
            android:layout_marginStart="132dp"
            android:layout_marginTop="137dp"
            android:minHeight="48dp"
            android:text="请输入用户名.." />

        <TextView
            android:id="@+id/ipass"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_alignParentTop="true"
            android:layout_gravity="center"
            android:layout_marginStart="60dp"
            android:layout_marginTop="199dp"
            android:text="密码" />

        <EditText
            android:id="@+id/inpass"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_alignParentEnd="true"
            android:layout_gravity="center"
            android:layout_marginTop="188dp"
            android:layout_marginEnd="182dp"
            android:minHeight="48dp"
            android:text="请输入密码" />

        <Button
            android:id="@+id/ensure"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_alignParentTop="true"
            android:layout_gravity="center"
            android:layout_marginStart="71dp"
            android:layout_marginTop="276dp"
            android:text="确定" />

        <Button
            android:id="@+id/canceled"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_alignParentTop="true"
            android:layout_gravity="center"
            android:layout_marginStart="281dp"
            android:layout_marginTop="284dp"
            android:text="取消" />

        <TextView
            android:id="@+id/show"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_alignParentTop="true"
            android:layout_centerInParent="true"
            android:layout_gravity="center"
            android:layout_marginStart="142dp"
            android:layout_marginTop="353dp"
            android:text="这里将展示菜单选项" />

    </RelativeLayout>

运行结果:

 

最后,报错原因可能如引文所述..


References:

android.support.v7.app.AppCompatActivity不能使用的解决办法 - 时间进行的小宇 - 博客园 (cnblogs.com)

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐