【问题标题】:The layout <layout> in layout has no declaration in the base layout folder [error]布局中的布局 <layout> 在基本布局文件夹中没有声明 [错误]
【发布时间】:2019-03-03 23:57:39
【问题描述】:

迁移到 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 的第一行得到错误。

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

谢谢

更新:用为我解决问题的方法回答了我的问题

【问题讨论】:

  • @L Kemp 曾经给我看你的 logcat
  • @Varma 实际上应用程序运行没有错误。我打开xml文件就可以看到错误,但是这个xml文件的布局运行正常
  • fill_parent 自 API 8 以来已弃用,并替换为 match_parent ViewGroup.LayoutParams
  • @MahdiJavaheri 谢谢你的建议,不过,我已经知道了,我正在一点一点地删除那些弃用的代码。
  • 在我的情况下,这是与文件名有关的问题,您也可以通过将文件重命名为小型大写字母来检查

标签: android xml android-studio


【解决方案1】:

就我而言,关闭并重新打开 Android Studio 解决了这个问题。重建项目或清除缓存没有帮助。

【讨论】:

  • 每次我添加一个新的布局文件时都会看到这个。重新启动/重建修复它,但有人找到它的根本原因吗?
  • 请注意 Build > Clean Project 为我解决了这个问题。
【解决方案2】:

你也可以试试这个:

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

【讨论】:

  • 是的,它有帮助,但奇怪的是,在以前的版本中 Build > Rebuild Project 有帮助。他们撞坏了一些东西。
  • 我给你加了一个加号,因为你的解决方案适用于 AS 3.2(在我的情况下没有 Eclipse)。
  • 为我工作!谢谢。
【解决方案3】:

在我的例子中,文件名中使用了大写字母。我将所有内容都保留为小写,并且已修复。

【讨论】:

  • 这是我的问题。多么奇怪的错误。只是把它变成小写,一切都很好。
【解决方案4】:

如果您设计布局: 布局-sw320dp 布局-sw480dp 布局-sw600dp 布局-sw720dp ....

你应该默认添加布局 像这样:

【讨论】:

    【解决方案5】:

    我刚刚做了Build &gt; Clean Project

    【讨论】:

      【解决方案6】:

      在 Gradle 模块之间移动布局文件时收到此错误。我没有必要去使缓存无效,因为它在我重新启动Android Studio清理项目 时自行解决。这似乎是一个 IDE 错误

      【讨论】:

        【解决方案7】:

        就我而言,我通过this 解决了这个问题:

        Android 告诉我这个 id-error:MissingDefaultResource 正如文档所说:

        如果资源仅在带有限定符的文件夹中定义,如 -land 或 -en,并且基础文件夹中没有默认声明(布局或值等),如果在 设备处于缺少给定配置的设备 限定符。

        作为一种特殊情况,可绘制对象不必在基础中指定 文件夹;如果密度文件夹中有匹配项(例如 drawable-mdpi) 该图像将被使用和缩放。但请注意 如果您只在 drawable-en-hdpi 之类的文件夹中指定可绘制对象,则 应用将在非英语语言环境中崩溃。

        可能存在您拥有资源的情况,例如 -fr 可绘制,仅从其他一些资源中引用 相同的限定符(例如 -fr 样式),它本身具有安全 后备。但是,这仍然使某人有可能 不小心引用了drawable和crash,所以更安全 在基本文件夹中创建一个默认的虚拟后备。或者,你 可以通过添加工具来抑制问题: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 中缺少

        【讨论】:

          【解决方案8】:

          Invalidate Cache / Restart 解决了我的问题。

          【讨论】:

            【解决方案9】:

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

            【讨论】:

              【解决方案10】:

              没有什么比重建项目或使缓存失效更适合我了。就我而言,关闭并重新打开 Android Studio 解决了问题

              【讨论】:

                【解决方案11】:

                Press- 'ctrl+A' --> 'ctrl+x' --> 'ctrl+v') 这不会改变任何东西,但显然可以解决错误。

                【讨论】:

                • 最初我认为这是一个愚蠢的答案,但这对我有用。向 Android Studio 众神致敬。
                【解决方案12】:

                我通过将项目与 gradle 同步解决了这个问题

                【讨论】:

                  【解决方案13】:

                  我已经使用 Windows 资源管理器复制了文件夹中的 xml 文件。它似乎导致了编码问题。 删除文件并在Android Studio中处理后,问题得到解决。

                  【讨论】:

                    【解决方案14】:

                    在我看来,Google 过去似乎期望(或至少接受)不同布局之间的不同名称;我有一个time_dialog.xml 和一个time_dialog_landscape.xml。将后者重命名为 time_dialog.xml 解决了这个问题。

                    【讨论】:

                      【解决方案15】:

                      对我来说,以下步骤使它起作用:

                      1. 将页面中的所有代码剪掉(ctrl+A+X对于windows)
                      2. 将代码粘贴回去。

                      【讨论】:

                      • 我也为strings.xml 中的类似问题做了一些事情,我同意这个
                      【解决方案16】:

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

                      【讨论】:

                        【解决方案17】:

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

                        【讨论】:

                          【解决方案18】:

                          与上一篇文章类似,我不得不重命名资源。我最初通过在项目资源管理器中复制粘贴 .xml 文件来创建它。令人困惑的是,它在资源管理器中具有相同的名称,但具有与布局关联的 land 暗淡属性。

                          我的解决方案是进入文件系统并手动将文件从layout-land 移动到layout 文件夹

                          【讨论】:

                            【解决方案19】:

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

                            【讨论】:

                              【解决方案20】:

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

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

                              删除点(右键单击名称,然后在 Android Studio 中 Refactor-Rename)解决了问题。

                              【讨论】:

                                【解决方案21】:

                                聚会迟到了,但我的情况与上面不同。

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

                                其实我的资源名是ic_menu_black_24dp.xml,所以和安卓的菜单资源冲突了。

                                【讨论】:

                                • 它不应该冲突,因为系统资源位于不同的命名空间中,即使它们是,用本地副本覆盖也应该没问题。
                                • 实际上我得到了与 OP 相同的错误,这是由于上面未列出的其他原因,所以我通过上述步骤解决了它。我发布了这个,以防有人遇到像我这样的问题可能会得到帮助。
                                【解决方案22】:

                                对我有用的是删除 id 属性

                                android:id="@+id/[id same as filename]"
                                

                                来自布局资源。

                                【讨论】:

                                  【解决方案23】:

                                  为我解决了什么问题:

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

                                  不确定这里到底发生了什么,但确实有效。

                                  【讨论】:

                                    【解决方案24】:

                                    (1) 删除原来的布局。

                                    (2) 重新添加布局。

                                    Step-1

                                    Step-2

                                    【讨论】:

                                      【解决方案25】:

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

                                      我的情况: 布局-> my_layout_land 布局 -> my_layout

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

                                      【讨论】:

                                        【解决方案26】:

                                        发生这种情况是因为我不小心用空格键而不是下划线命名了文件,即fragment_item summary.xml 而不是fragment_item_summary.xml

                                        【讨论】:

                                        • 这个问题已经在 2 年前回答了。该问题与文件编码有关,而不是空格键问题。所以我投票关闭它。
                                        【解决方案27】:

                                        tools:ignore="MissingDefaultResource" 放在屏幕布局描述中解决了我的问题。

                                        【讨论】:

                                          猜你喜欢
                                          • 1970-01-01
                                          • 2011-07-21
                                          • 2013-01-06
                                          • 1970-01-01
                                          • 2014-01-24
                                          • 1970-01-01
                                          • 2023-03-15
                                          • 1970-01-01
                                          • 1970-01-01
                                          相关资源
                                          最近更新 更多