После перехода на 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.
Кто-нибудь знает, как решить эту ошибку?
Спасибо
ОБНОВЛЕНИЕ: ответил на мой вопрос, что решило проблему для меня.
@Varma на самом деле приложение работает без ошибок. Я просто вижу ошибку, как только открываю XML-файл, но макет этого XML-файла работает нормально
fill_parent устарел с API 8 и заменен на match_parent ViewGroup.LayoutParams
@MahdiJavaheri Спасибо за ваш совет, однако, я уже знал об этом, я постепенно удаляю этот устаревший код.
В моем случае это была проблема, связанная с именем файла, вы также можете проверить, переименовав файл в маленькие заглавные буквы.
Я переименовал файл и получил эту проблему. Самая раздражающая вещь, которую я когда-либо видел в студии Android.
Попробуйте сначала построить, у меня возникла та же проблема после создания макета, но после сборки она исчезла.
Вы также можете попробовать это:
Файл => Недействительный кеш / перезапуск => Недействительный и перезапуск.
Да, помогает, но странно, что в предыдущих версиях помогало Build> Rebuild Project. Они что-то разбили.
Я добавил вам один плюс, так как ваши решения работают на AS 3.2 (в моем случае без Eclipse).
В моем случае закрытие и повторное открытие студии Android решил проблему. Восстановление проекта или очистка кеша не помогли.
Я вижу это каждый раз, когда добавляю новый файл макета. Перезапуск / восстановление исправляет это, но кто-нибудь нашел основную причину этого?
Обратите внимание, что Build> Clean Project решила проблему для меня.
Я получил эту ошибку при перемещении файлов макета между модулями 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.
он не должен конфликтовать, поскольку системные ресурсы находятся в другом пространстве имен, и даже если бы они были, переопределение с помощью вашей локальной копии должно было быть нормальным.
На самом деле я получил ту же ошибку, что и OP, это произошло по другим причинам, не перечисленным выше, поэтому я решил ее с помощью вышеуказанного шага. Я опубликовал это, если кто-то сталкивается с такой же проблемой, как моя, может получить помощь.
У меня сработало удаление атрибута id
android:id = "@+id/[id same as filename]"
из ресурса макета.
В моем случае эта проблема была вызвана прописной буквой. Неправильные символы, такие как "-", также могут вызвать проблему.
Я изменил имя с Activity_disease.xml на activity_disease.xml, и проблема исправлена.
В моем случае это было использование заглавных букв в имени файла. Я оставил все в нижнем регистре и это было исправлено.
Это была моя проблема. Какая странная ошибка. Просто сделал это строчными буквами, и все было хорошо.
Для меня следующие шаги заставили его работать:
Что-то я сделал для аналогичной проблемы и в strings.xml, я согласен с этим
У меня ничего не работало, как перестройка проекта или признание кеша недействительным. В моем случае закрытие и повторное открытие студии 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.
@L Kemp однажды покажи мне свой логарифм