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

После перехода с 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.

Кто-нибудь знает, как решить эту ошибку?

Спасибо

ОБНОВЛЕНИЕ: Кажется, это проблема кодирования. Я скопировал XML файлы в папку с помощью проводника Windows. После удаления файлов и их копирования в Android Studio проблема была решена.

Ответ 1

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

Ответ 2

Вы также можете попробовать следующее:

File => Invalidate Caches/Restart => Invalidate и Restart.

screenshot

Ответ 3

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

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

enter image description here

Ответ 4

В моем случае я решил, что с этим:

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

Если ресурс определен только в папках с такими классификаторами, как -land или -en, и в базовой папке (макете или значениях и т.д.) Не указано объявление по умолчанию, приложение будет аварийно завершено, если к этому ресурсу будет обращаться на устройстве, где устройство находится в конфигурации, не содержащей данный определитель.

В качестве специального случая в базовой папке не нужно указывать чертежи; если в папке плотности есть совпадение (например, drawable-mdpi), изображение будет использоваться и масштабироваться. Обратите внимание, однако, что если вы укажете только выделение в папке, например drawable -en -hdpi, приложение выйдет из строя не в -en.

Могут быть сценарии, в которых у вас есть ресурс, например -fr drawable, который ссылается только на другой ресурс с теми же квалификаторами (например, -fr), который сам имеет безопасные резервные копии. Тем не менее, это все еще позволяет кому-то случайно ссылаться на drawable и crash, поэтому безопаснее создавать резервную копию в исходной папке по умолчанию. Кроме того, вы можете устранить проблему, добавив инструменты: ignore = "MissingDefaultResource" в элементе.

(Этот сценарий часто случается с строковыми переводами, где вы можете удалить код и соответствующие ресурсы, но забудьте удалить перевод. Для этого сценария есть выделенный идентификатор проблемы, с идентификатором 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

Ответ 5

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

Ответ 6

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

Ответ 7

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

Ответ 8

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

Ответ 9

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

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

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

Ответ 10

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

Ответ 11

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

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

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

Ответ 12

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

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

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