Макет <layout> в макете не объявлен в папке базового макета [ошибка]

После перехода на Android Studio 3.2, API 28, я получаю следующую ошибку в макете моего приложения:

The layout in layout has no declaration in the base layout folder; this can lead to crashes when the resource is queried in a configuration that does not match this qualifier

Один из макетов, при котором я получаю эту ошибку:

<?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 однажды покажи мне свой логарифм

Vijaya Varma Lanke 28.09.2018 07:25

@Varma на самом деле приложение работает без ошибок. Я просто вижу ошибку, как только открываю XML-файл, но макет этого XML-файла работает нормально

L Kemp 28.09.2018 07:39

fill_parent устарел с API 8 и заменен на match_parent ViewGroup.LayoutParams

Mahdi Javaheri 06.10.2018 16:14

@MahdiJavaheri Спасибо за ваш совет, однако, я уже знал об этом, я постепенно удаляю этот устаревший код.

L Kemp 09.10.2018 03:19

В моем случае это была проблема, связанная с именем файла, вы также можете проверить, переименовав файл в маленькие заглавные буквы.

Akash kumar 29.03.2020 14:23

Я переименовал файл и получил эту проблему. Самая раздражающая вещь, которую я когда-либо видел в студии Android.

Karan Sharma 01.04.2020 10:21

Попробуйте сначала построить, у меня возникла та же проблема после создания макета, но после сборки она исчезла.

Badri Paudel 07.01.2021 19:07
122
7
68 870
25
Перейти к ответу Данный вопрос помечен как решенный

Ответы 25

Вы также можете попробовать это:

Файл => Недействительный кеш / перезапуск => Недействительный и перезапуск.

screenshot

Да, помогает, но странно, что в предыдущих версиях помогало Build> Rebuild Project. Они что-то разбили.

CoolMind 11.10.2018 17:57

Я добавил вам один плюс, так как ваши решения работают на AS 3.2 (в моем случае без Eclipse).

CoolMind 16.10.2018 09:03

В моем случае закрытие и повторное открытие студии Android решил проблему. Восстановление проекта или очистка кеша не помогли.

Я вижу это каждый раз, когда добавляю новый файл макета. Перезапуск / восстановление исправляет это, но кто-нибудь нашел основную причину этого?

HBB20 17.04.2020 18:47

Обратите внимание, что Build> Clean Project решила проблему для меня.

Kraigolas 27.10.2020 21:11

Я получил эту ошибку при перемещении файлов макета между модулями Gradle. Мне не пришлось заходить так далеко до аннулировать кеши, поскольку он разрешился сам, когда я перезапустил Android Studio и очистил проект. Похоже, это Ошибка IDE.

В моем случае кажется, что Google ожидал (или, по крайней мере, принимал) разные имена между разными макетами; У меня были time_dialog.xml и time_dialog_landscape.xml. Переименование последнего в time_dialog.xml устранило проблему.

В моем случае я решил это с помощью это:

Android говорит мне, что это id-error: MissingDefaultResource, как говорится в документации:

If a resource is only defined in folders with qualifiers like -land or -en, and there is no default declaration in the base folder (layout or values etc), then the app will crash if that resource is accessed on a device where the device is in a configuration missing the given qualifier.

As a special case, drawables do not have to be specified in the base folder; if there is a match in a density folder (such as drawable-mdpi) that image will be used and scaled. Note however that if you only specify a drawable in a folder like drawable-en-hdpi, the app will crash in non-English locales.

There may be scenarios where you have a resource, such as a -fr drawable, which is only referenced from some other resource with the same qualifiers (such as a -fr style), which itself has safe fallbacks. However, this still makes it possible for somebody to accidentally reference the drawable and crash, so it is safer to create a default dummy fallback in the base folder. Alternatively, you can suppress the issue by adding tools:ignore = "MissingDefaultResource" on the element.

(This scenario frequently happens with string translations, where you might delete code and the corresponding resources, but forget to delete a translation. There is a dedicated issue id for that scenario, with the 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

Если вы разрабатываете свой макет: макет-sw320dp макет-sw480dp макет-sw600dp макет-sw720dp ....

вы должны добавить макет по умолчанию нравится:

Эта проблема, похоже, возникает из-за того, что студия или компилятор не может найти файл ресурсов в папке базового макета. Чтобы решить эту проблему, вам может потребоваться создать файл в разных папках макета. Если вы используете папки макетов v21, v25 и т. д. Для разработки макетов для различных целевых устройств, вам также может потребоваться разместить туда свои файлы ресурсов.

В моем случае это предупреждение появилось из-за «неправильного» символа (точки) в имени значения:

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

Удаление точек (щелчок правой кнопкой мыши по имени, затем рефакторинг-переименование в Android Studio) решило проблему.

Я решил эту проблему, просто синхронизировав проект с gradle

Поздно на вечеринку, но мой случай отличается от приведенного выше.

Я просто переименовал ресурс и все заработало.

На самом деле имя моего ресурса было ic_menu_black_24dp.xml, поэтому оно конфликтовало с ресурсом меню Android.

он не должен конфликтовать, поскольку системные ресурсы находятся в другом пространстве имен, и даже если бы они были, переопределение с помощью вашей локальной копии должно было быть нормальным.

Brill Pappin 19.05.2020 17:07

На самом деле я получил ту же ошибку, что и OP, это произошло по другим причинам, не перечисленным выше, поэтому я решил ее с помощью вышеуказанного шага. Я опубликовал это, если кто-то сталкивается с такой же проблемой, как моя, может получить помощь.

Ashish Shukla 20.05.2020 14:14

У меня сработало удаление атрибута id

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

из ресурса макета.

В моем случае эта проблема была вызвана прописной буквой. Неправильные символы, такие как "-", также могут вызвать проблему. Я изменил имя с Activity_disease.xml на activity_disease.xml, и проблема исправлена.

(1) Удалите исходный макет.

(2) Добавьте макет еще раз.

Шаг 1

Шаг 2

В моем случае это было использование заглавных букв в имени файла. Я оставил все в нижнем регистре и это было исправлено.

Это была моя проблема. Какая странная ошибка. Просто сделал это строчными буквами, и все было хорошо.

Panama Jack 14.07.2020 17:54

Для меня следующие шаги заставили его работать:

  1. Вырежьте весь код со страницы (ctrl + A + X для windows)
  2. Вставьте код обратно.

Что-то я сделал для аналогичной проблемы и в strings.xml, я согласен с этим

Kevin Murvie 13.12.2019 06:37

У меня ничего не работало, как перестройка проекта или признание кеша недействительным. В моем случае закрытие и повторное открытие студии Android решило проблему.

Я только что сделал Build > Clean Project

Что для меня решило:

В Android Studio щелкните правой кнопкой мыши имя файла в каталоге макета и выберите Переформатировать код без специального флажка на следующем экране.

Не уверен, что именно здесь происходит под капотом, но это сработало.

У меня возникла проблема после копирования / вставки кода в файл макета XML, но я исправил ее, просто создав файл вручную. Очень странно, так как код был точно таким же, но каким-то образом исправил эту проблему. Я попытался перезапустить и выполнить исправление «File => Invalidate Caches / Restart => Invalidate and Restart», но проблема была устранена только путем ручного воссоздания файла.

Примечание, что, когда вы используете разные версии макета, такие как (Большой / Маленький / Норнал), тогда в этом случае у вас должна быть одна и та же основная папка макета. вот так

В моем случае отображалась та же ошибка, потому что файл макета и имя файла макета были разными.

Мое дело: макет земли -> my_layout_land макет -> my_layout

Я решил это, сделав оба имени файла одинаковыми. Потому что, если вы используете layout-land и у вас есть файл в layout-land, тогда у вас также должен быть файл в папке layout.

Ответ принят как подходящий

Я скопировал файлы xml в папку с помощью проводника Windows. Похоже, это вызвало проблему с кодировкой. После удаления файлов и копирования их в Android Studio проблема была решена.

Нажмите- 'ctrl + A' -> 'ctrl + x' -> 'ctrl + v') это ничего не меняет, но, по-видимому, решает ошибки.

Invalidate Cache / Restart решил мою проблему.

Как и в предыдущем посте, пришлось переименовать ресурс. Первоначально я создал его, скопировав файл .xml в проводник проекта. Как ни странно, у него было то же имя в проводнике, но с затемненным атрибутом land, связанным с макетом.

Мое решение заключалось в том, чтобы зайти в файловую систему и вручную переместить файл из layout-land в папку layout.

Другие вопросы по теме