布局中的布局<layout>在基本布局文件夹中没有声明[错误]


97

从Eclipse迁移到新版本的Android Studio 3.2,API 28之后,我的应用布局出现以下错误:

布局中的布局在基本布局文件夹中没有声明;在与该限定符不匹配的配置中查询资源时,这可能导致崩溃

我收到此错误的布局之一是:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:background="@null" >

      <FrameLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >

        <ImageView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="top|center_horizontal"
            android:adjustViewBounds="true"
            android:contentDescription="@string/hello_world"
            android:src="@drawable/loading_top" />

        <ImageView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom|center_horizontal"
            android:adjustViewBounds="true"
            android:contentDescription="@string/hello_world"
            android:src="@drawable/loading_bottom" />

        <ImageView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:contentDescription="@string/hello_world"
            android:background="@color/white"
            android:layout_marginBottom="5dp"
            android:paddingTop="10dp"
            android:paddingBottom="10dp"
            android:src="@drawable/loading_logo" />

        <ImageView
            android:id="@+id/loading"
            android:layout_width="fill_parent"
            android:layout_height="match_parent"
            android:layout_gravity="center|center_vertical"
            android:layout_marginBottom="0dp"
            android:layout_marginTop="0dp"
            android:contentDescription="@string/hello_world"
            android:scaleType="fitXY"
            android:src="@null" />
    </FrameLayout>
</LinearLayout>

我在第一个LinearLayout的第一行收到错误。

有谁知道如何解决这个错误?

谢谢

更新:这似乎是一个编码问题。我已经使用Windows资源管理器将xml文件复制到了该文件夹中。删除文件并在Android Studio中对其进行处理后,此问题已解决。


@L Kemp曾向我展示您的日志
Vijaya Varma Lanke

@Varma实际上,该应用程序运行无误。打开xml文件后,我只是可以看到错误,但是此xml文件的布局正常运行
L Kemp

从API 8开始不推荐使用fill_parent,而将其替换为match_parent ViewGroup.LayoutParams
Mahdi Javaheri,

@MahdiJavaheri感谢您的建议,但是,我已经知道,我将一点一点地删除不推荐使用的代码。
肯普

就我而言,这是与文件名有关的问题,您也可以通过小写重命名文件来进行检查
Akash kumar

Answers:


135

以我为例,关闭并重新打开Android Studio即可解决问题。重建项目或清除缓存无济于事。


3
每当我添加新的布局文件时,都会看到此信息。重新启动/重建可以修复它,但是没有人找到它的根本原因吗?
HBB20

请注意,“构建”>“清理项目”为我解决了该问题。
生动的克雷格

54

您也可以尝试以下方法:

文件=>使高速缓存无效/重新启动=>无效并重新启动。

屏幕截图


2
是的,它有所帮助,但很奇怪,在以前的版本中,Build> Rebuild Project有所帮助。他们撞了东西。
CoolMind

我为您添加了一个加号,因为您的解决方案适用于AS 3.2(在我的情况下,没有Eclipse)。
CoolMind

15

在我的情况下,文件名中使用大写字母。我把所有东西都用小写字母固定了。


这是我的问题。真是个奇怪的错误。只是把它变成小写,一切都很好。
巴拿马杰克


6

在Gradle模块之间移动布局文件时收到此错误。当我重新启动并清理项目时,它可以自行解决,我并没有必要使缓存失效。看来可能是IDE错误Android Studio


5

就我而言,我通过以下方式解决了这个问题

Android告诉我这个id错误:MissingDefaultResource作为文档说:

如果仅在带有-land或-en等限定符的文件夹中定义资源,并且基本文件夹中没有默认声明(布局或值等),则如果在设备上访问该资源的设备上的应用程序将崩溃在配置中缺少给定的限定词。

在特殊情况下,不必在基本文件夹中指定可绘制对象。如果在密度文件夹(例如drawable-mdpi)中存在匹配项,则将使用该图像并进行缩放。但是请注意,如果仅在诸如drawable-en-hdpi之类的文件夹中指定一个drawable,则该应用程序将在非英语语言环境中崩溃。

在某些情况下,您拥有一个资源(例如-fr drawable),该资源仅从具有相同限定符(例如-fr样式)的某些其他资源中引用,该资源本身具有安全的后备。但是,这仍然使某些人意外地引用了drawable并崩溃,因此在基本文件夹中创建默认的虚拟后备更为安全。另外,您可以通过在元素上添加tools:ignore =“ MissingDefaultResource”来抑制此问题。

(这种情况经常发生在字符串翻译中,您可能会删除代码和相应的资源,但是忘记删除翻译。该情形有专门的问题ID,其ID为ExtraTranslation。)

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:tools="http://schemas.android.com/tools"
      tools:ignore="MissingDefaultResource" <!--this-->
      android:layout_width="match_parent"
      android:layout_height="match_parent">

但这是一个简单的解决方案,因为您错过了Android中的资源。

我可以使用文件系统选项解决此问题。如果Android告诉您缺少资源,则意味着缺少某些东西,您应该对此进行补充。

您应该转到\ app \ src \ main \ res

也许:右键单击文件丢失的文件夹,在Exporer中显示,然后返回到\ app \ src \ main \ res

你应该找到

/layout

/layout-normal

/layout-large

/some more folders

您应该找到丢失文件的位置。就我而言,/ layout中缺少



3

就我而言,此问题是由大写字母引起的。错误的字符(如“-”)也可能导致此问题。我将名称从更改为Activity_disease.xmlactivity_disease.xml并解决了问题。


2

没有什么比重建项目或使缓存无效对我有用。以我为例,关闭并重新打开Android Studio即可解决此问题


1

就我而言,似乎Google曾经期望(或至少接受)不同布局之间的不同名称;我有一个time_dialog.xml和一个time_dialog_landscape.xml。重命名后者以time_dialog.xml解决此问题。



1

对我来说,以下步骤使其有效:

  1. 将所有代码剪切出页面(对于Windows为ctrl+ A+ X
  2. 粘贴回代码。

我也为类似的问题所做的事情,我也strings.xml同意这一点
Kevin Murvie

0

由于Studio或编译器无法在基本布局文件夹中找到资源文件,因此似乎正在发生此问题。要解决该问题,您可能需要将文件创建到不同的布局文件夹中。如果您使用布局文件夹v21,v25等文件夹来设计不同目标设备的布局,那么您可能还需要将资源文件放置在此处。


0

在我的情况下,此警告是由于值名称中使用“错误”字符(点)而出现的:

<dimen name="dp.divider.xlarge">24dp</dimen>

删除圆点(右键单击名称,然后在Android Studio中使用“重命名”)解决了该问题。


0

晚会晚了,但我的情况与上面不同。

我刚刚重命名了资源,它开始工作。

实际上我的资源名称是ic_menu_black_24dp.xml,因此它与android的菜单资源冲突。


它应该不会冲突,因为系统资源位于不同的命名空间中,即使它们存在,使用本地副本进行覆盖也应该没问题。
Brill Pappin

1
其实我和OP发生了同样的错误,这是由于上面没有列出的其他原因造成的,所以我通过以上步骤解决了这个问题。
Ashish Shukla


0

是什么解决了我的问题:

在Android Studio中,右键单击布局目录中的文件名,然后选择重新格式化代码,在下一屏幕上未选择特殊复选框。

不知道这里到底发生了什么,但这确实可行。


0

将代码复制/粘贴到XML布局文件后,我遇到了问题,但是我只是通过手动创建文件来解决它。很奇怪,因为代码完全相同,但是以某种方式解决了这个问题。我确实尝试过重新启动并执行“文件=>无效的缓存/重新启动=>无效并重新启动”修复程序,但仅通过手动重新创建文件来解决此问题。


0

请注意,当您使用不同版本的布局(例如(Large / Small / Nornal))时,这种情况下您必须使用相同的主布局文件夹。像这样

在此处输入图片说明



0

在我的情况下,由于布局用地文件和布局文件名不同,因此显示相同的错误。

我的情况:layout-land-> my_layout_land layout-> my_layout

我通过使两个文件名相同来解决它。因为如果您正在使用layout-land,并且您在layout-land中有一个文件,那么您还必须在layout文件夹中也有一个文件。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.