Układ <layout> w układzie nie ma deklaracji w folderze układu podstawowego [błąd]

102

Po migracji do Android Studio 3.2, API 28, pojawia się następujący błąd w układzie mojej aplikacji:

Układ w układzie nie ma deklaracji w folderze układu podstawowego; może to prowadzić do awarii, gdy zasób jest odpytywany w konfiguracji, która nie pasuje do tego kwalifikatora

Jeden z układów, w których otrzymuję ten błąd, to:

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

Otrzymuję błąd w pierwszym wierszu pierwszego LinearLayout.

Czy ktoś wie jak rozwiązać ten błąd?

Dziękuję Ci

AKTUALIZACJA: Odpowiedziałem na moje pytanie, co rozwiązało problem

L Kemp
źródło
@L Kemp raz pokaż mi swój logcat
Vijaya Varma Lanke
@Varma faktycznie aplikacja działa bez błędów. Po prostu widzę błąd po otwarciu pliku xml, ale układ tego pliku xml działa normalnie
L Kemp
fill_parent jest przestarzałe od API 8 i zastąpione przez match_parent ViewGroup.LayoutParams
Mahdi Javaheri
@MahdiJavaheri Dziękuję za twoją radę, jednak już to wiem, stopniowo usuwam ten przestarzały kod.
L Kemp
W moim przypadku był to problem związany z nazwą pliku, możesz również sprawdzić, zmieniając nazwę pliku małymi literami
Akash kumar

Odpowiedzi:

145

W moim przypadku zamknięcie i ponowne otwarcie Android Studio rozwiązało problem. Odbudowanie projektu lub wyczyszczenie pamięci podręcznej nie pomogło.

vovaost
źródło
3
Widzę to za każdym razem, gdy dodaję nowy plik układu. Ponowne uruchomienie / odbudowanie rozwiązuje problem, ale czy ktoś znalazł jego podstawową przyczynę?
HBB20
1
Zauważ, że kompilacja> Wyczyść projekt rozwiązało problem za mnie.
Vivid Kraig
57

Możesz też spróbować tego:

File => Invalidate Caches / Restart => Invalidate and Restart.

zrzut ekranu

Itoun
źródło
2
Tak, pomaga, ale dziwne, że w poprzednich wersjach Build> Rebuild Project pomogło. Coś rozbili.
CoolMind,
Dodałem Ci jeden plus, ponieważ Twoje rozwiązania działają na AS 3.2 (w moim przypadku bez Eclipse).
CoolMind
15

W moim przypadku było to użycie wielkich liter w nazwie pliku. Zostawiłem wszystko małymi literami i zostało to naprawione.

Zioh
źródło
To był mój problem. Co za dziwny błąd. Tylko małe litery i wszystko było dobrze.
Panama Jack,
10

Jeśli opracujesz swój układ: layout-sw320dp layout-sw480dp layout-sw600dp layout-sw720dp ....

powinieneś dodać układ domyślnie w ten sposób:

wprowadź opis obrazu tutaj

Ayoub Anbara
źródło
7

Otrzymałem ten błąd podczas przenoszenia plików układu między modułami Gradle . Nie musiałem posuwać się tak daleko, aby unieważniać pamięci podręczne, ponieważ rozwiązało się to samo, gdy uruchomiłem ponownie Android Studioi wyczyściłem projekt . Wygląda na to, że jest to błąd IDE .

Travis Castillo
źródło
5

W moim przypadku rozwiązałem to w ten sposób :

Android powie mi ten błąd id: MissingDefaultResource, jak mówi dokumentacja:

Jeśli zasób jest zdefiniowany tylko w folderach z kwalifikatorami takimi jak -land lub -en i nie ma domyślnej deklaracji w folderze podstawowym (układ lub wartości itp.), Aplikacja ulegnie awarii, jeśli dostęp do tego zasobu zostanie uzyskany na urządzeniu, na którym urządzenie jest w konfiguracji, w której brakuje podanego kwalifikatora.

W szczególnym przypadku elementy rysunkowe nie muszą być określone w folderze podstawowym; jeśli w folderze gęstości (takim jak drawable-mdpi) znajduje się dopasowanie, obraz zostanie użyty i przeskalowany. Należy jednak pamiętać, że jeśli określisz tylko plik do rysowania w folderze, takim jak drawable-en-hdpi, aplikacja ulegnie awarii w językach innych niż angielski.

Mogą istnieć scenariusze, w których masz zasób, taki jak a -fr drawable, do którego odwołuje się tylko inny zasób z tymi samymi kwalifikatorami (takimi jak a -fr style), który sam ma bezpieczne rezerwy. Jednak nadal umożliwia to komuś przypadkowe odwołanie się do pliku do rysowania i awarii, więc bezpieczniej jest utworzyć domyślną fałszywą rezerwę w folderze podstawowym. Alternatywnie możesz rozwiązać problem, dodając narzędzia: ignore = "MissingDefaultResource" do elementu.

(Ten scenariusz często ma miejsce w przypadku tłumaczeń ciągów, w których można usunąć kod i odpowiednie zasoby, ale zapomnieć o usunięciu tłumaczenia. Istnieje specjalny identyfikator problemu dla tego scenariusza, z identyfikatorem 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">

Ale to jest łatwe rozwiązanie, ponieważ tracisz zasoby w Androidzie.

Rozwiązuję to za pomocą opcji systemu plików . Jeśli Android powie Ci o brakujących zasobach, co oznacza, że ​​czegoś brakuje, powinieneś je uzupełnić.

powinieneś iść do \ app \ src \ main \ res

być może: kliknij prawym przyciskiem myszy folder brakujący pliku, pokaż w Exporer i wróć do \ app \ src \ main \ res

Powinieneś zostać znaleziony

/layout

/layout-normal

/layout-large

/some more folders

Powinieneś znaleźć miejsce, w którym brakuje plików. W moim przypadku tego brakuje w / layout

Walter Palacios
źródło
5

właśnie zrobiłem Build > Clean Project

rmirabelle
źródło
3

W moim przypadku ten problem był spowodowany dużymi literami. Nieprawidłowe znaki, takie jak „-”, również mogą powodować problem. Zmieniłem nazwę z Activity_disease.xmlna activity_disease.xmli problem został rozwiązany.

Dani Nuñez
źródło
2

Nic nie działało dla mnie jak odbudowanie projektu lub unieważnienie pamięci podręcznej. W moim przypadku zamknięcie i ponowne otwarcie Android Studio rozwiązało problem .

Rahul
źródło
1

W moim przypadku wydaje się, że Google oczekiwał (lub przynajmniej akceptował) różne nazwy w różnych układach; Miałem time_dialog.xmli time_dialog_landscape.xml. Zmiana nazwy tego ostatniego, aby time_dialog.xmlrozwiązać problem.

John Perry
źródło
1

Rozwiązałem ten problem, po prostu zsynchronizowałem projekt z Gradle

memresubasi
źródło
1

U mnie udało się wykonać następujące kroki:

  1. Wytnij cały kod ze strony ( ctrl+ A+ Xdla Windows)
  2. Wklej kod z powrotem.
Vander
źródło
Coś, co zrobiłem dla podobnego problemu strings.xml, zgadzam się z tym
Kevin Murvie
0

Wydaje się, że ten problem występuje, ponieważ studio lub kompilator nie może znaleźć pliku zasobów w folderze układu podstawowego. Aby rozwiązać problem, może być konieczne utworzenie pliku w różnych folderach układu. Jeśli używasz folderów układu v21, v25 itp. Do projektowania układów dla różnych urządzeń docelowych, może być również konieczne umieszczenie tam plików zasobów.

rintu
źródło
0

W moim przypadku to ostrzeżenie pojawiło się z powodu "niewłaściwego" znaku (kropki) użytego w nazwie wartości:

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

Usunięcie kropek (kliknij prawym przyciskiem myszy nazwę, a następnie Refactor-Rename w Android Studio) rozwiązało problem.

Taha
źródło
0

Spóźniłem się na imprezę, ale mój przypadek jest inny niż powyżej.

Właśnie zmieniłem nazwę zasobu i zaczęło działać.

Właściwie nazwa mojego zasobu to ic_menu_black_24dp.xml, więc było to w konflikcie z zasobem menu Androida.

Ashish Shukla
źródło
nie powinno to powodować konfliktu, ponieważ zasoby systemowe znajdują się w innej przestrzeni nazw, a nawet gdyby były, zastąpienie ich lokalną kopią powinno wystarczyć.
Brill Pappin
1
Właściwie otrzymałem ten sam błąd co OP, który był spowodowany innymi przyczynami niewymienionymi powyżej, więc rozwiązałem go według powyższego kroku. Opublikowałem ten przypadek, gdy ktoś napotka problem taki jak mój, może uzyskać pomoc.
Ashish Shukla
0

Pomogło mi usunięcie atrybutu id

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

z zasobu układu.

Ruud Siebierski
źródło
0

Co mi to rozwiązało:

W Android Studio kliknij prawym przyciskiem myszy nazwę pliku w katalogu układu i wybierz opcję Sformatuj kod , bez specjalnego pola wyboru na następnym ekranie.

Nie jestem pewien, co dokładnie dzieje się pod maską, ale zadziałało.

Razvan_TK9692
źródło
0

Miałem problem po skopiowaniu / wklejeniu kodu do pliku układu XML, ale naprawiłem go, po prostu ręcznie tworząc plik. Bardzo dziwne, ponieważ kod był dokładnie taki sam, ale w jakiś sposób rozwiązał ten problem. Próbowałem zrestartować i wykonać poprawkę "File => Invalidate Caches / Restart => Invalidate and Restart", ale problem został rozwiązany tylko przez ręczne odtworzenie pliku.

oggynator
źródło
0

Zwróć uwagę, że jeśli używasz różnych wersji układu, takich jak ( Duży / Mały / Nornal ), to w takim przypadku musisz mieć ten sam główny folder układu. w ten sposób

wprowadź opis obrazu tutaj

pankaj kumar
źródło
0

(1) Usuń oryginalny układ.

(2) Ponownie dodaj układ.

Krok 1

Krok 2

liqiang
źródło
0

W moim przypadku ten sam błąd był wyświetlany, ponieważ plik układu i nazwa pliku układu były różne.

My Case: layout-land -> my_layout_land layout -> my_layout

Rozwiązałem to, czyniąc obie nazwy plików takimi samymi. Ponieważ jeśli używasz obszaru layoutu i masz plik w obszarze layoutu, musisz mieć również plik w folderze układu.

Ujjawal Kumar
źródło
0

Skopiowałem pliki xml z folderu za pomocą Eksploratora Windows. Wygląda na to, że spowodował problem z kodowaniem. Po usunięciu plików i skopiowaniu ich w Android Studio problem został rozwiązany.

L Kemp
źródło