Макет <layout> у макеті не має оголошення в базовій папці макета [помилка]


97

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

Хтось знає, як вирішити цю помилку?

Дякую

ОНОВЛЕННЯ: Відповів на моє запитання тим, що вирішило проблему для мене


@L Kemp одного разу покажи мені ur logcat
Vijaya Varma Lanke

@Varma насправді додаток працює без помилок. Я просто бачу помилку, коли я відкриваю файл xml, але макет цього файлу xml працює нормально
L Kemp

fill_parent застарілий, оскільки API 8 замінений на match_parent ViewGroup.LayoutParams
Mahdi Javaheri

@MahdiJavaheri Дякую за вашу пораду, однак я це вже знав, потроху видаляючи застарілий код.
L Kemp

У моєму випадку це була проблема, пов’язана з ім’ям файлу, ви також можете перевірити, перейменувавши файл у маленькі регістри
Akash kumar

Відповіді:


135

У моєму випадку закриття та відкриття Android-студії вирішило проблему. Перебудова проекту або очищення кешу не допомогли.


3
Я бачу це кожного разу, коли додаю новий файл макета. Перезапуск / відновлення це виправляє, але чи хтось знайшов першопричину?
HBB20,

Зверніть увагу, що Build> Clean Project вирішив проблему для мене.
Яскравий Крайг,

54

Ви також можете спробувати це:

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

скріншот


2
Так, це допомагає, але дивно, що в попередніх версіях Build> Rebuild Project допомагало. Вони щось розбили.
CoolMind

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

15

У моєму випадку це було використання великих літер в назві файлу. Я залишив усе з малої літери, і це було виправлено.


Це було моє питання. Яка дивна помилка. Просто зробив це малою літерою, і все було добре.
Панама Джек

10

Якщо ви розробляєте свій макет: layout-sw320dp layout-sw480dp layout-sw600dp layout-sw720dp

вам слід додати макет за замовчуванням, наприклад:

введіть тут опис зображення


6

Я отримав цю помилку під час переміщення файлів макета між модулями Gradle . Мені не довелося заходити настільки, щоб зневажати кеші, оскільки він вирішився сам, коли я перезапустив Android Studioі очистив проект . Здається, це помилка IDE .


5

У моєму випадку я вирішив це за допомогою цього :

Android каже мені цю помилку ідентифікатора: MissingDefaultResource як документація каже:

Якщо ресурс визначається лише в папках з такими кваліфікаторами, як -land або -en, і в базовій папці (макет, значення тощо) немає декларації за замовчуванням, тоді програма буде аварійно завершуватися, якщо доступ до цього ресурсу здійснюється на пристрої, де пристрій у конфігурації відсутній заданий кваліфікатор.

Як особливий випадок, в основній папці не потрібно вказувати малюнки, які можна використовувати; якщо в папці щільності є збіг (наприклад, drawable-mdpi), це зображення буде використано та масштабовано. Однак зауважте, що якщо ви вкажете лише drawable у такій папці, як drawable-en-hdpi, програма буде аварійно працювати в неанглійських мовах.

Можуть існувати сценарії, коли у вас є ресурс, такий як -fr drawable, на який посилається лише якийсь інший ресурс з тими самими кваліфікаторами (наприклад, стиль -fr), який сам має безпечні відкати. Однак це все ще дозволяє комусь випадково посилатись на файл, що малюється, і аварійно завершувати роботу, тому безпечніше створити фіктивну резервну копію за замовчуванням у базовій папці. Ви також можете придушити проблему, додавши інструменти: 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



3

У моєму випадку ця проблема була спричинена великими літерами. Неправильні символи типу "-" також можуть спричинити проблему. Я змінив назву з Activity_disease.xmlна activity_disease.xmlта проблему вирішено.


2

У мене нічого не працювало, як перебудова проекту або інвалідування кешу. У моєму випадку закриття та повторне відкриття студії Android вирішило проблему .


1

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


1

Я вирішив це питання, просто синхронізувавши проект із gradle


1

Для мене наступні кроки змусили це працювати:

  1. Вирізати весь код зі сторінки ( ctrl+ A+ Xдля Windows)
  2. Вставте код назад.

Щось, що я теж робив для подібної проблеми strings.xml, я погоджуюся з цим
Кевін Мюрві

0

Здається, ця проблема трапляється, оскільки студія або компілятор не може знайти файл ресурсу всередині базової папки макета. Для вирішення проблеми вам може знадобитися створити файл у різних папках макета. Якщо ви використовуєте папки макета v21, v25 тощо для розробки макетів для різних цільових пристроїв, вам також може знадобитися розмістити там свої файли ресурсів.


0

У моєму випадку це попередження з’явилося через "неправильний" символ (крапка), який використовується в назві значення:

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

Видалення крапок (клацніть правою кнопкою миші на імені, а потім - Refactor-Rename в Android Studio) вирішило проблему.


0

Пізно на вечірку, але моя справа відрізняється від вищезазначеної.

Я просто перейменував ресурс, і він почав працювати.

Насправді моє ім'я ресурсу було ic_menu_black_24dp.xml, тому воно суперечило ресурсу меню андроїда.


це не повинно суперечити, оскільки системні ресурси знаходяться в іншому просторі імен, і навіть якщо вони були, перевизначення вашої локальної копії повинно було бути нормальним.
Брилл Паппін,

1
Насправді я отримав ту саму помилку, що і OP, це було через інші причини, не перелічені вище, тому я вирішив це за допомогою вищевикладеного кроку.
Ашіш Шукла


0

Що це вирішило для мене:

В Android Studio клацніть правою кнопкою миші на назві файлу в каталозі макета та виберіть « Переформатувати код» , без спеціального прапорця на наступному екрані.

Не впевнений, що саме тут відбувається під капотом, але це спрацювало.


0

У мене виникла проблема після копіювання / вставки коду у файл XML-макета, але я вирішив це просто створивши файл вручну. Дуже дивно, оскільки код був точно таким же, але якимось чином він вирішив цю проблему. Я спробував перезапуститись і виконати виправлення "Файл => Недійсні кеші / Перезапуск => Недійсні та перезапустити", але проблема була виправлена ​​лише шляхом відтворення файлу вручну.


0

Зверніть увагу, що коли ви використовуєте різні версії макету, такі як ( Large / Small / Nornal ), тоді ви повинні мати ту саму основну папку макета. як цей спосіб

введіть тут опис зображення



0

У моєму випадку відображалася та сама помилка, оскільки файл layout-land та назва файлу макета відрізнялися.

Мій випадок: layout-land -> my_layout_land layout -> my_layout

Я вирішив це, зробивши обидва імена файлів однаковими. Тому що якщо ви використовуєте layout-land і у вас є файл у layout-land, тоді ви також повинні мати файл у папці layout.


0

Я скопіював файли xml у папці за допомогою Провідника Windows. Схоже, це спричинило проблему з кодуванням. Після видалення файлів та обробки їх у Android Studio проблема була вирішена.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.