Tata letak <layout> dalam layout tidak memiliki deklarasi di folder tata letak dasar [error]

97

Setelah bermigrasi ke Android Studio 3.2, API 28, saya mendapatkan kesalahan berikut pada tata letak aplikasi saya:

Tata letak dalam tata letak tidak memiliki deklarasi di folder tata letak dasar; hal ini dapat menyebabkan error saat resource dikueri dalam konfigurasi yang tidak cocok dengan qualifier ini

Salah satu tata letak yang saya dapatkan kesalahan ini adalah:

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

Saya mendapatkan kesalahan pada baris pertama dari LinearLayout pertama.

Adakah yang tahu bagaimana mengatasi kesalahan ini?

Terima kasih

UPDATE: Menjawab pertanyaan saya dengan apa yang telah menyelesaikan masalah saya

L Kemp
sumber
@ L Kemp pernah menunjukkan logcat Anda
Vijaya Varma Lanke
@Varma sebenarnya aplikasi berjalan tanpa kesalahan. Saya hanya dapat melihat kesalahan setelah saya membuka file xml, tetapi tata letak file xml ini berjalan normal
L Kemp
fill_parent tidak digunakan lagi sejak API 8 dan diganti dengan match_parent ViewGroup.LayoutParams
Mahdi Javaheri
@MahdiJavaheri Terima kasih atas saran Anda, namun saya sudah tahu bahwa, saya menghapus kode yang sudah usang itu sedikit demi sedikit.
L Kemp
Dalam kasus saya, ini adalah masalah yang terkait dengan nama file, Anda juga dapat memeriksa dengan mengganti nama file Anda dalam huruf kecil
Akash kumar

Jawaban:

135

Dalam kasus saya, menutup dan membuka kembali studio Android memecahkan masalah. Membangun kembali proyek atau membersihkan cache tidak membantu.

vovahost
sumber
3
Saya melihat ini setiap kali saya menambahkan file tata letak baru. Memulai kembali / membangun kembali perbaikan tetapi apakah ada yang menemukan akar penyebabnya?
HBB20
Perhatikan bahwa Build> Clean Project menyelesaikan masalah untuk saya.
Vivid Kraig
54

Anda juga dapat mencoba ini:

File => Invalidasi Cache / Restart => Invalidate dan Restart.

tangkapan layar

Itoun
sumber
2
Ya, itu membantu, tetapi aneh, bahwa dalam versi sebelumnya Build> Rebuild Project membantu. Mereka menabrak sesuatu.
CoolMind
Saya menambahkan satu nilai plus kepada Anda, karena solusi Anda berfungsi untuk AS 3.2 (dalam kasus saya tanpa Eclipse).
CoolMind
15

Dalam kasus saya itu adalah penggunaan huruf kapital di nama file. Saya meninggalkan semuanya dalam huruf kecil dan sudah diperbaiki.

Zioh
sumber
Ini adalah masalah saya. Benar-benar serangga yang aneh. Hanya membuatnya menjadi huruf kecil dan semuanya baik-baik saja.
Panama Jack
10

Jika Anda merancang tata letak Anda: layout-sw320dp layout-sw480dp layout-sw600dp layout-sw720dp

Anda harus menambahkan tata letak secara default seperti inie:

masukkan deskripsi gambar di sini

Ayoub Anbara
sumber
6

Saya menerima kesalahan ini saat memindahkan file tata letak di antara modul Gradle . Saya tidak perlu melangkah lebih jauh untuk membatalkan cache karena itu teratasi sendiri ketika saya memulai ulang Android Studiodan membersihkan proyek . Sepertinya ini adalah bug IDE .

Travis Castillo
sumber
5

Dalam kasus saya, saya menyelesaikannya dengan ini :

Android mengatakan kepada saya id-error ini: MissingDefaultResource sebagai dokumentasi mengatakan:

Jika sumber daya hanya ditentukan dalam folder dengan qualifier seperti -land atau -en, dan tidak ada deklarasi default di folder dasar (tata letak atau nilai, dll), aplikasi akan mogok jika sumber daya itu diakses pada perangkat tempat perangkat dalam konfigurasi tidak memiliki kualifikasi yang diberikan.

Sebagai kasus khusus, drawable tidak harus ditentukan di folder dasar; jika ada kecocokan dalam folder kepadatan (seperti drawable-mdpi), gambar itu akan digunakan dan diskalakan. Namun perlu diperhatikan bahwa jika Anda hanya menentukan drawable dalam folder seperti drawable-en-hdpi, aplikasi akan mogok di lokal non-Inggris.

Mungkin ada skenario di mana Anda memiliki sumber daya, seperti a -fr drawable, yang hanya dirujuk dari beberapa sumber daya lain dengan qualifier yang sama (seperti gaya -fr), yang dengan sendirinya memiliki fallback yang aman. Namun, ini masih memungkinkan seseorang untuk secara tidak sengaja mereferensikan drawable dan crash, jadi lebih aman untuk membuat fallback dummy default di folder dasar. Atau, Anda dapat mengatasi masalah ini dengan menambahkan alat: ignore = "MissingDefaultResource" pada elemen.

(Skenario ini sering terjadi dengan terjemahan string, di mana Anda mungkin menghapus kode dan sumber daya yang sesuai, tetapi lupa menghapus terjemahan. Ada ID masalah khusus untuk skenario itu, dengan 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">

Tapi ini solusi yang mudah, karena Anda kehilangan sumber di Android.

Saya menyelesaikan ini dengan opsi sistem file . Jika Android memberi tahu Anda tentang sumber daya yang hilang, berarti ada sesuatu yang hilang dan Anda harus mengisinya kembali.

Anda harus pergi ke \ app \ src \ main \ res

mungkin: klik kanan di folder file yang hilang, tampilkan di Exporer, dan kembali ke \ app \ src \ main \ res

Anda harus ditemukan

/layout

/layout-normal

/layout-large

/some more folders

Anda harus menemukan di mana file-file tersebut hilang. Dalam kasus saya, itu tidak ada di / layout

Walter Palacios
sumber
5

saya baru saja melakukannya Build > Clean Project

rmirabelle.dll
sumber
3

Dalam kasus saya, masalah ini disebabkan oleh huruf besar. Karakter yang salah seperti "-" juga dapat menyebabkan masalah. Saya mengubah nama dari Activity_disease.xmlmenjadi activity_disease.xmldan masalah diperbaiki.

Dani Nuñez
sumber
2

Tidak ada yang berhasil bagi saya seperti membangun kembali proyek atau Memvalidasi cache. Dalam kasus saya, menutup dan membuka kembali studio Android memecahkan masalah .

Rahul
sumber
1

Dalam kasus saya, tampaknya Google dulu mengharapkan (atau setidaknya menerima) nama yang berbeda di antara tata letak yang berbeda; Saya punya time_dialog.xmldan a time_dialog_landscape.xml. Mengganti nama yang terakhir untuk time_dialog.xmlmemperbaiki masalah.

John Perry
sumber
1

Saya memecahkan masalah ini hanya dengan menyinkronkan proyek dengan gradle

memresubasi
sumber
1

Bagi saya, langkah-langkah berikut membuatnya berhasil:

  1. Potong semua kode dari halaman ( ctrl+ A+X untuk windows)
  2. Tempel kembali kodenya.
Vander
sumber
Sesuatu yang saya lakukan untuk masalah serupa strings.xmljuga, saya setuju dengan yang ini
Kevin Murvie
0

Masalah ini tampaknya terjadi karena studio atau compiler tidak dapat menemukan file resource di dalam folder base layout. Untuk mengatasi masalah, Anda mungkin perlu membuat file ke dalam folder tata letak yang berbeda. Jika Anda menggunakan folder tata letak v21, folder v25 dll. Untuk merancang tata letak untuk perangkat target yang berbeda, Anda mungkin juga perlu menempatkan file sumber daya di sana.

rintu
sumber
0

Dalam kasus saya, peringatan ini muncul karena karakter "salah" (titik) yang digunakan dalam nama nilai:

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

Menghapus titik-titik (klik kanan pada sebuah nama, lalu Refactor-Rename di Android Studio) menyelesaikan masalah.

Taha
sumber
0

Terlambat ke pesta tetapi kasus saya berbeda dari di atas.

Saya baru saja mengganti nama sumber daya dan itu mulai bekerja.

Sebenarnya nama sumber daya saya adalah ic_menu_black_24dp.xml sehingga bertentangan dengan sumber daya menu android.

Ashish Shukla
sumber
seharusnya tidak konflik, karena sumber daya sistem berada di namespace yang berbeda, dan bahkan jika ada, menimpa dengan salinan lokal Anda seharusnya baik-baik saja.
Brill Pappin
1
Sebenarnya saya mendapat kesalahan yang sama dengan OP itu karena alasan lain tidak tercantum di atas jadi saya menyelesaikannya dengan langkah di atas. Saya telah memposting ini jika seseorang menghadapi masalah seperti saya mungkin mendapatkan bantuan.
Ashish Shukla
0

Apa yang berhasil bagi saya adalah menghapus atribut id

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

dari sumber tata letak.

Ruud Siebierski
sumber
0

Apa yang memecahkannya untuk saya:

Di Android Studio, klik kanan pada nama file di direktori layout, dan pilih Reformat code , tanpa kotak centang khusus yang dipilih di layar berikutnya.

Tidak yakin apa yang sebenarnya terjadi di bawah tenda di sini, tapi itu berhasil.

Razvan_TK9692
sumber
0

Saya mengalami masalah setelah menyalin / menempel kode ke dalam file tata letak XML, tetapi saya memperbaikinya hanya dengan membuat file secara manual. Sangat aneh, karena kodenya persis sama, tetapi entah bagaimana memperbaiki masalah ini. Saya memang mencoba memulai ulang dan melakukan perbaikan "File => Invalidate Caches / Restart => Invalidate and Restart", tetapi masalah hanya diperbaiki dengan membuat ulang file secara manual.

oggynator
sumber
0

Perhatikan bahwa ketika Anda menggunakan versi tata letak yang berbeda seperti ( Besar / Kecil / Nornal ) maka Anda harus menggunakan folder tata letak utama yang sama. seperti ini

masukkan deskripsi gambar di sini

pankaj kumar
sumber
0

(1) Hapus tata letak asli.

(2) Tambahkan kembali tata letak.

Langkah 1

Langkah 2

liqiang
sumber
0

Dalam kasus saya, kesalahan yang sama muncul karena file layout-land dan nama file layout berbeda.

Kasus Saya: layout-land -> my_layout_land layout -> my_layout

Saya menyelesaikannya dengan membuat kedua nama file sama. Karena jika Anda menggunakan layout-land dan Anda memiliki file di layout-land maka Anda juga harus memiliki file di folder layout.

Ujjawal Kumar
sumber
0

Saya telah menyalin file xml di folder menggunakan Windows Explorer. Tampaknya telah menyebabkan masalah encoding. Setelah menghapus file dan mengatasinya di dalam Android Studio, masalahnya teratasi.

L Kemp
sumber