Android7.1 使用ToolBar, XML文件报错 androidx.appcompat.widget.Toolbar, was not found in the project解决方案

完整报错信息:
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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七月是你的谎言..

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值