Ответ 1
В моем случае закрытие и повторное открытие Android-студии решило проблему. Перестройка проекта или аннулирование кэша не помогли.
После перехода с 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 проблема была решена.
В моем случае закрытие и повторное открытие Android-студии решило проблему. Перестройка проекта или аннулирование кэша не помогли.
Вы также можете попробовать следующее:
File => Invalidate Caches/Restart => Invalidate и Restart.
Если вы разработали свой макет: layout-sw320dp layout-sw480dp layout-sw600dp layout-sw720dp
вы должны добавить макет по умолчанию, например thise:
В моем случае я решил, что с этим:
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
В моем случае эта проблема была вызвана заглавными буквами. Неправильные символы, такие как "-", также могут вызвать проблему.
Я изменил название с Activity_disease.xml
на activity_disease.xml
, и проблема была устранена.
Я получил эту ошибку при перемещении файлов макета между модулями Gradle. Мне не пришлось заходить так далеко, чтобы отменить кеширование, поскольку оно разрешилось, когда я перезапустил Android Studio и очистил проект. Похоже, что это ошибка IDE.
В моем случае кажется, что Google ожидал (или, по крайней мере, принимал) разные имена между разными макетами; У меня было time_dialog.xml
и time_dialog_landscape.xml
. Переименование последнего на time_dialog.xml
исправило проблему.
Эта проблема, кажется, происходит из-за того, что студия или компилятор не могут найти файл ресурсов в папке базовой разметки. Для решения проблемы вам может потребоваться создать файл в разных папках макета. Если вы используете папки макетов v21, v25 и т.д. Для разработки макетов для различных целевых устройств, вам также может понадобиться разместить там файлы ресурсов.
В моем случае это предупреждение появилось из-за "неправильного" символа (точки), используемого в имени значения:
<dimen name="dp.divider.xlarge">24dp</dimen>
Удаление точек (щелчок правой кнопкой мыши по имени, затем Refactor-Rename в Android Studio) решило проблему.
Я решил эту проблему, просто синхронизировав проект с Gradle
Поздно на вечеринку, но мой случай отличается от выше.
Я просто переименовал ресурс, и он начал работать.
На самом деле мое имя ресурса было ic_menu_black_24dp.xml, поэтому он конфликтовал с ресурсом меню Android.
Для меня сработало удаление атрибута id
android:id="@+id/[id same as filename]"
из ресурса макета.