Das Layout <Layout> im Layout hat keine Deklaration im Basislayoutordner [Fehler]


92

Nach der Migration von Eclipse auf die neue Version von Android Studio 3.2, API 28, wird im Layout meiner App die folgende Fehlermeldung angezeigt:

Das Layout im Layout enthält keine Deklaration im Basislayoutordner. Dies kann zu Abstürzen führen, wenn die Ressource in einer Konfiguration abgefragt wird, die nicht mit diesem Qualifikationsmerkmal übereinstimmt

Eines der Layouts, bei denen ich diesen Fehler erhalte, ist:

<?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>

Ich erhalte den Fehler in der ersten Zeile des ersten LinearLayout.

Weiß jemand, wie man diesen Fehler löst?

Danke dir

UPDATE: Es scheint ein Codierungsproblem zu sein. Ich hatte die XML-Dateien mit Windows Explorer in den Ordner kopiert. Nach dem Löschen und Kopieren der Dateien in Android Studio wurde das Problem behoben.


@ L Kemp zeigen mir einmal ur logcat
Vijaya Varma Lanke

@Varma eigentlich läuft die App fehlerfrei. Ich kann den Fehler nur sehen, wenn ich die XML-Datei öffne, aber das Layout dieser XML-Datei läuft normal
L Kemp

fill_parent ist seit API 8 veraltet und wird durch match_parent ViewGroup.LayoutParams
Mahdi Javaheri

@ MahdiJavaheri Vielen Dank für Ihren Rat, aber ich habe bereits gewusst, dass ich diesen veralteten Code nach und nach entferne.
L Kemp

In meinem Fall handelte es sich um ein Problem im Zusammenhang mit dem Dateinamen. Sie können dies auch überprüfen, indem Sie Ihre Datei in Small Caps
umbenennen

Antworten:


128

In meinem Fall hat das Schließen und erneute Öffnen von Android Studio das Problem gelöst. Das Projekt neu zu erstellen oder den Cache zu leeren, hat nicht geholfen.


2
Ich sehe dies jedes Mal, wenn ich eine neue Layoutdatei hinzufüge. Durch Neustarten / Neuerstellen wird das Problem behoben, aber hat jemand die Hauptursache dafür gefunden?
HBB20

51

Sie können dies auch versuchen:

Datei => Caches ungültig machen / Neustart => Ungültig machen und neu starten.

Bildschirmfoto


2
Ja, es hilft, aber seltsam, dass in früheren Versionen Build> Rebuild Project geholfen hat. Sie haben etwas abgestürzt.
CoolMind

Ich habe Ihnen ein Plus hinzugefügt, da Ihre Lösungen für AS 3.2 funktionieren (in meinem Fall ohne Eclipse).
CoolMind

hat mir sehr geholfen .... danke
yasriady

1
Das ist Arbeit, vielen Dank
Debugger

14

In meinem Fall war es die Verwendung von Großbuchstaben im Dateinamen. Ich habe alles in Kleinbuchstaben gelassen und es wurde behoben.


Das war mein Problem. Was für ein komischer Fehler. Ich habe es nur in Kleinbuchstaben geschrieben und alles war gut.
Panama Jack

10

Wenn Sie Ihr Layout erstellen: layout-sw320dp layout-sw480dp layout-sw600dp layout-sw720dp

Sie sollten standardmäßig das folgende Layout hinzufügen:

Geben Sie hier die Bildbeschreibung ein


5

In meinem Fall gelöst ich , dass mit dieser :

Das Android sagt mir diesen ID-Fehler: MissingDefaultResource als Dokumentation sagt:

Wenn eine Ressource nur in Ordnern mit Qualifikationsmerkmalen wie -land oder -en definiert ist und im Basisordner keine Standarddeklaration vorhanden ist (Layout oder Werte usw.), stürzt die App ab, wenn auf diese Ressource auf einem Gerät zugegriffen wird, auf dem das Gerät installiert ist In einer Konfiguration fehlt das angegebene Qualifikationsmerkmal.

Als Sonderfall müssen Drawables nicht im Basisordner angegeben werden. Wenn in einem Dichteordner (z. B. drawable-mdpi) eine Übereinstimmung vorliegt, wird dieses Bild verwendet und skaliert. Beachten Sie jedoch, dass die App in nicht englischen Gebietsschemas abstürzt, wenn Sie nur ein Zeichen in einem Ordner wie drawable-en-hdpi angeben.

Es kann Szenarien geben, in denen Sie über eine Ressource verfügen, z. B. ein -fr-Drawable, auf die nur von einer anderen Ressource mit denselben Qualifikationsmerkmalen (z. B. ein -fr-Stil) verwiesen wird, die selbst sichere Fallbacks aufweist. Dies ermöglicht es jedoch weiterhin, dass jemand versehentlich auf das Drawable verweist und abstürzt. Daher ist es sicherer, einen Standard-Dummy-Fallback im Basisordner zu erstellen. Alternativ können Sie das Problem unterdrücken, indem Sie Tools hinzufügen: ignore = "MissingDefaultResource" für das Element.

(Dieses Szenario tritt häufig bei Zeichenfolgenübersetzungen auf, bei denen Sie möglicherweise Code und die entsprechenden Ressourcen löschen, aber vergessen, eine Übersetzung zu löschen. Für dieses Szenario gibt es eine dedizierte Problem-ID mit der 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">

Dies ist jedoch die einfache Lösung, da Sie die Ressource in Android verpassen.

Ich löse dies mit der Dateisystemoption . Wenn Android Sie über fehlende Ressourcen informiert, bedeutet dies, dass etwas fehlt, und Sie sollten dies wieder auffüllen.

Sie sollten zu \ app \ src \ main \ res gehen

Vielleicht: Klicken Sie mit der rechten Maustaste in den fehlenden Ordner der Datei, zeigen Sie ihn in Exporer an und kehren Sie zu \ app \ src \ main \ res zurück

Du solltest finden

/layout

/layout-normal

/layout-large

/some more folders

Sie sollten herausfinden, wo die Dateien fehlen. In meinem Fall fehlt das in / layout


5

Ich habe diesen Fehler beim Verschieben von Layoutdateien zwischen Gradle-Modulen erhalten . Ich musste nicht so weit gehen , Caches ungültig zu machen, da es sich beim Neustart Android Studiound Bereinigen des Projekts von selbst auflöste . Es scheint wahrscheinlich ein IDE-Fehler zu sein .



2

In meinem Fall wurde dieses Problem durch Großbuchstaben verursacht. Falsche Zeichen wie "-" können ebenfalls das Problem verursachen. Ich habe den Namen von Activity_disease.xmlin geändert activity_disease.xmlund das Problem behoben.


2

Für mich hat nichts so gut funktioniert wie das Projekt neu zu erstellen oder den Cache ungültig zu machen. In meinem Fall hat das Schließen und erneute Öffnen von Android Studio das Problem gelöst .


1

In meinem Fall hat Google anscheinend unterschiedliche Namen zwischen verschiedenen Layouts erwartet (oder zumindest akzeptiert). Ich hatte ein time_dialog.xmlund ein time_dialog_landscape.xml. Letzteres time_dialog.xmlumbenennen, um das Problem zu beheben.


1

Ich habe dieses Problem gelöst, indem ich nur das Projekt mit gradle synchronisiert habe


1

Für mich haben die folgenden Schritte funktioniert:

  1. Schneiden Sie den gesamten Code aus der Seite aus ( ctrl+ A+ Xfür Windows)
  2. Fügen Sie den Code wieder ein.

Etwas, das ich auch für ein ähnliches Problem getan strings.xmlhabe, stimme ich diesem zu
Kevin Murvie

0

Dieses Problem scheint aufzutreten, weil Studio oder Compiler die Ressourcendatei nicht im Basislayoutordner finden können. Um das Problem zu lösen, müssen Sie die Datei möglicherweise in verschiedenen Layoutordnern erstellen. Wenn Sie Layoutordner v21, v25 usw. zum Entwerfen von Layouts für verschiedene Zielgeräte verwenden, müssen Sie möglicherweise auch Ihre Ressourcendateien dort ablegen.


0

In meinem Fall wurde diese Warnung aufgrund eines im Wertnamen verwendeten "falschen" Zeichens (Punkts) angezeigt:

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

Das Entfernen von Punkten (Rechtsklick auf einen Namen, dann Refactor-Rename in Android Studio) hat das Problem behoben.


0

Spät zur Party, aber mein Fall ist anders als oben.

Ich habe die Ressource gerade umbenannt und sie hat funktioniert.

Eigentlich war mein Ressourcenname ic_menu_black_24dp.xml, also widersprach er der Menüressource des Android.


Es sollte keine Konflikte auftreten, da sich die Systemressourcen in einem anderen Namespace befinden. Selbst wenn dies der Fall wäre, hätte das Überschreiben mit Ihrer lokalen Kopie in Ordnung sein müssen.
Brill Pappin

1
Eigentlich habe ich den gleichen Fehler wie beim OP erhalten, der aus anderen oben nicht aufgeführten Gründen aufgetreten ist, also habe ich ihn durch den obigen Schritt behoben. Ich hatte diesen Fehler gepostet, falls jemand vor einem Problem steht, wie das meine möglicherweise Hilfe bekommt.
Ashish Shukla

0

Was für mich funktioniert hat, ist das ID-Attribut zu entfernen

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

aus der Layout-Ressource.


0

Was hat es für mich gelöst:

Klicken Sie in Android Studio mit der rechten Maustaste auf den Dateinamen im Layoutverzeichnis und wählen Sie Code neu formatieren, ohne dass im nächsten Bildschirm ein spezielles Kontrollkästchen aktiviert ist.

Ich bin mir nicht sicher, was genau unter der Haube hier vor sich geht, aber das hat funktioniert.


0

Ich hatte ein Problem nach dem Kopieren / Einfügen von Code in eine XML-Layoutdatei, aber ich habe es behoben, indem ich die Datei einfach manuell erstellt habe. Sehr seltsam, da der Code genau der gleiche war, aber irgendwie wurde dieses Problem behoben. Ich habe versucht, neu zu starten und die Korrektur "Datei => Caches ungültig machen / Neustart => Ungültig machen und neu starten" durchzuführen, aber das Problem wurde nur durch manuelles Neuerstellen der Datei behoben.


0

Beachten Sie, dass Sie in diesem Fall denselben Hauptlayoutordner verwenden müssen , wenn Sie verschiedene Layoutversionen wie ( Groß / Klein / Nornal ) verwenden. so

Geben Sie hier die Bildbeschreibung ein



Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.