Макет <layout>в макете не имеет объявления в папке базового макета [ошибка] - PullRequest
0 голосов
/ 28 сентября 2018

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

Iполучить ошибку в первой строке первого LinearLayout.

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

Спасибо

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

Ответы [ 11 ]

0 голосов
/ 12 июля 2019

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

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

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

0 голосов
/ 05 августа 2019

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

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

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

0 голосов
/ 17 января 2019

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

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

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

0 голосов
/ 20 мая 2019

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

0 голосов
/ 22 ноября 2018

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

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

enter image description here

0 голосов
/ 27 ноября 2018

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

0 голосов
/ 13 ноября 2018

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

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

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

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

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

Я разрешаю это с помощью опции file system .Если Android сообщит вам о пропущенном ресурсе, то есть чего-то не хватает, и вы должны пополнить его.

, вам нужно перейти в \ app \ src \ main \ res

возможно: щелкните правой кнопкой мыши в отсутствующей папке файла, отобразите в Exporer и вернитесь к \ app \ src \ main \ res

Вы должны найти

/layout

/layout-normal

/layout-large

/some more folders

YouНужно найти где файлы отсутствуют.В моем случае это отсутствует в / layout

0 голосов
/ 25 октября 2018

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

0 голосов
/ 12 октября 2018

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

0 голосов
/ 12 октября 2018

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...