完整报错信息:
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,进行以下两步操作:
- 进入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博客https://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)