เค้าโครง <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 แรก

ไม่มีใครรู้วิธีแก้ข้อผิดพลาดนี้?

ขอบคุณ

UPDATE: ตอบคำถามของฉันพร้อมสิ่งที่ช่วยแก้ปัญหาให้ฉันได้


@L Kemp เคยแสดง 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 ช่วยแก้ปัญหาให้ฉันได้
Vivid Kraig

54

คุณยังสามารถลองสิ่งนี้:

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

ภาพหน้าจอ


2
ใช่มันช่วยได้ แต่แปลกที่ในเวอร์ชันก่อนหน้า Build> Rebuild Project ช่วยได้ พวกเขาขัดข้องบางอย่าง
CoolMind

ฉันเพิ่มหนึ่งบวกให้คุณเนื่องจากโซลูชันของคุณใช้ได้กับ AS 3.2 (ในกรณีของฉันที่ไม่มี Eclipse)
CoolMind

15

ในกรณีของฉันมันคือการใช้ตัวพิมพ์ใหญ่ในชื่อไฟล์ ฉันทิ้งทุกอย่างเป็นตัวพิมพ์เล็กและได้รับการแก้ไขแล้ว


นี่คือปัญหาของฉัน ช่างเป็นจุดบกพร่องแปลก ๆ แค่ทำให้เป็นตัวพิมพ์เล็กและทั้งหมดก็ดี
Panama Jack

10

ถ้าคุณประดิษฐ์เค้าโครงของคุณ: layout-sw320dp layout-sw480dp layout-sw600dp layout-sw720dp

คุณควรเพิ่มเค้าโครงโดยค่าเริ่มต้นเช่นนี้:

ป้อนคำอธิบายภาพที่นี่


6

ผมได้รับข้อผิดพลาดนี้เมื่อมีการย้ายไฟล์รูปแบบระหว่างโมดูล Gradle ผมไม่ต้องไปไกลถึงกับแคชโมฆะขณะที่มันได้รับการแก้ไขตัวเองเมื่อฉันเริ่มต้นใหม่Android Studioและทำความสะอาดโครงการ ดูเหมือนว่าน่าจะเป็นข้อผิดพลาด IDE


5

ในกรณีของฉันฉันแก้ไขได้ด้วยสิ่งนี้ :

Android บอกว่าข้อผิดพลาด idนี้: MissingDefaultResourceเป็นเอกสารบอกว่า:

หากทรัพยากรถูกกำหนดเฉพาะในโฟลเดอร์ที่มีคุณสมบัติเช่น -land หรือ -en และไม่มีการประกาศเริ่มต้นในโฟลเดอร์ฐาน (เค้าโครงหรือค่า ฯลฯ ) แอปจะหยุดทำงานหากมีการเข้าถึงทรัพยากรนั้นบนอุปกรณ์ที่อุปกรณ์ อยู่ในการกำหนดค่าที่ไม่มีคุณสมบัติที่กำหนด

ในกรณีพิเศษไม่จำเป็นต้องระบุ drawables ในโฟลเดอร์ฐาน หากมีการจับคู่ในโฟลเดอร์ความหนาแน่น (เช่น drawable-mdpi) ภาพนั้นจะถูกใช้และปรับขนาด อย่างไรก็ตามโปรดทราบว่าหากคุณระบุเฉพาะ drawable ในโฟลเดอร์เช่น drawable-en-hdpi แอปจะหยุดทำงานในภาษาที่ไม่ใช่ภาษาอังกฤษ

อาจมีสถานการณ์ที่คุณมีทรัพยากรเช่น a -fr drawable ซึ่งอ้างอิงจากทรัพยากรอื่นที่มีคุณสมบัติเดียวกันเท่านั้น (เช่นสไตล์ a -fr) ซึ่งมีทางเลือกที่ปลอดภัย อย่างไรก็ตามสิ่งนี้ยังคงทำให้ใครบางคนสามารถอ้างถึงสิ่งที่วาดได้และความผิดพลาดโดยไม่ได้ตั้งใจดังนั้นการสร้างทางเลือกจำลองเริ่มต้นในโฟลเดอร์ฐานจะปลอดภัยกว่า หรือคุณสามารถระงับปัญหาได้โดยการเพิ่มเครื่องมือ: เพิกเฉย = "MissingDefaultResource" ในองค์ประกอบ

(สถานการณ์นี้มักเกิดขึ้นกับการแปลสตริงซึ่งคุณอาจลบโค้ดและทรัพยากรที่เกี่ยวข้อง แต่ลืมลบคำแปลมี id ปัญหาเฉพาะสำหรับสถานการณ์นั้นพร้อมด้วย 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">

แต่นี่เป็นวิธีแก้ปัญหาที่ง่ายเพราะคุณพลาดการช่วยเหลือใน Android

ฉันแก้ไขปัญหานี้ด้วยตัวเลือกระบบไฟล์ หากAndroidบอกคุณเกี่ยวกับการขอความช่วยเหลือที่ขาดหายไปหมายความว่ามีบางอย่างหายไปและคุณควรเติมเต็มสิ่งนั้น

คุณควรไปที่ \ app \ src \ main \ res

อาจจะ: คลิกขวาในโฟลเดอร์ที่หายไปของไฟล์แสดงใน Exporer และกลับไปที่ \ app \ src \ main \ res

คุณควรจะพบ

/layout

/layout-normal

/layout-large

/some more folders

คุณควรจะพบว่าไฟล์หายไปไหน ในกรณีของฉันที่ขาดหายไปใน / เค้าโครง



3

ในกรณีของฉันปัญหานี้เกิดจากตัวอักษรตัวพิมพ์ใหญ่ อักขระที่ไม่ถูกต้องเช่น "-" อาจทำให้เกิดปัญหาได้เช่นกัน ฉันเปลี่ยนชื่อจากActivity_disease.xmlเป็นactivity_disease.xmlและปัญหาได้รับการแก้ไขแล้ว


2

ไม่มีอะไรได้ผลสำหรับฉันเช่นการสร้างโครงการใหม่หรือการทำให้แคชไม่ถูกต้อง ในกรณีของฉันการปิดและเปิดสตูดิโอ Android อีกครั้งช่วยแก้ปัญหาได้


1

ในกรณีของฉันดูเหมือนว่า Google เคยคาดหวัง (หรืออย่างน้อยก็ยอมรับ) ชื่อที่แตกต่างกันระหว่างรูปแบบต่างๆ ฉันมีtime_dialog.xmlและtime_dialog_landscape.xml. การเปลี่ยนชื่อหลังเพื่อtime_dialog.xmlแก้ไขปัญหา



1

สำหรับฉันขั้นตอนต่อไปนี้ทำให้มันใช้งานได้:

  1. ตัดโค้ดทั้งหมดออกจากหน้า ( ctrl+ A+ Xสำหรับ windows)
  2. วางรหัสกลับ

บางสิ่งที่ฉันทำด้วยปัญหาที่คล้ายกันstrings.xmlฉันเห็นด้วยกับปัญหานี้
Kevin Murvie

0

ปัญหานี้ดูเหมือนจะเกิดขึ้นเนื่องจากสตูดิโอหรือคอมไพเลอร์ไม่พบไฟล์ทรัพยากรภายในโฟลเดอร์เค้าโครงพื้นฐาน ในการแก้ปัญหาคุณอาจต้องสร้างไฟล์ในโฟลเดอร์เค้าโครงอื่น หากคุณใช้โฟลเดอร์เลย์เอาต์โฟลเดอร์ v21, v25 เป็นต้นสำหรับการออกแบบเลย์เอาต์สำหรับอุปกรณ์เป้าหมายต่างๆคุณอาจต้องวางไฟล์ทรัพยากรของคุณไว้ที่นั่นด้วย


0

ในกรณีของฉันคำเตือนนี้ปรากฏขึ้นเนื่องจากอักขระ "ผิด" (จุด) ที่ใช้ในชื่อค่า:

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

การลบจุด (คลิกขวาที่ชื่อจากนั้น Refactor-Rename ใน Android Studio) ช่วยแก้ปัญหาได้


0

สายไปงานเลี้ยง แต่กรณีของฉันแตกต่างจากด้านบน

ฉันเพิ่งเปลี่ยนชื่อทรัพยากรและเริ่มทำงาน

ที่จริงชื่อทรัพยากรของฉันคือ ic_menu_black_24dp.xml ดังนั้นจึงขัดแย้งกับทรัพยากรเมนูของ Android


ไม่ควรขัดแย้งกันเนื่องจากทรัพยากรระบบอยู่ในเนมสเปซที่แตกต่างกันและแม้ว่าจะเป็นเช่นนั้นการแทนที่ด้วยสำเนาในเครื่องของคุณก็น่าจะดี
Brill Pappin

1
อันที่จริงฉันได้รับข้อผิดพลาดเดียวกันกับ OP เนื่องจากสาเหตุอื่น ๆ ที่ไม่ได้ระบุไว้ข้างต้นดังนั้นฉันจึงแก้ไขตามขั้นตอนข้างต้นฉันได้โพสต์ในกรณีที่มีคนประสบปัญหาเช่นฉันอาจได้รับความช่วยเหลือ
Ashish Shukla

0

สิ่งที่ได้ผลสำหรับฉันคือการลบแอตทริบิวต์ id

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

จากทรัพยากรเค้าโครง


0

สิ่งที่แก้ไขให้ฉัน:

ใน Android Studio ให้คลิกขวาที่ชื่อไฟล์ในไดเร็กทอรีโครงร่างแล้วเลือกรหัสฟอร์แมตโดยไม่ได้เลือกกล่องกาเครื่องหมายพิเศษในหน้าจอถัดไป

ไม่แน่ใจว่าเกิดอะไรขึ้นภายใต้ประทุนที่นี่ แต่ก็ใช้ได้ผล


0

ฉันมีปัญหาหลังจากคัดลอก / วางโค้ดลงในไฟล์เลย์เอาต์ XML แต่ฉันแก้ไขโดยการสร้างไฟล์ด้วยตนเอง แปลกมากเนื่องจากรหัสเหมือนกันทุกประการ แต่ก็แก้ไขปัญหานี้ได้ ฉันได้ลองรีสตาร์ทและทำการแก้ไข "File => Invalidate Caches / Restart => Invalidate and Restart" แต่ปัญหาได้รับการแก้ไขโดยการสร้างไฟล์ด้วยตนเองเท่านั้น


0

โปรดทราบว่าเมื่อคุณใช้เลย์เอาต์เวอร์ชันต่างๆเช่น ( ขนาดใหญ่ / เล็ก / Nornal ) คุณจะต้องใช้โฟลเดอร์เลย์เอาต์หลักเดียวกัน ชอบวิธีนี้

ป้อนคำอธิบายภาพที่นี่



0

ในกรณีของฉันแสดงข้อผิดพลาดเดียวกันเนื่องจากไฟล์เลย์เอาต์แลนด์และชื่อไฟล์เลย์เอาต์แตกต่างกัน

กรณีของฉัน: layout-land -> my_layout_land layout -> my_layout

ฉันแก้ไขโดยทำให้ชื่อไฟล์ทั้งสองเหมือนกัน เพราะถ้าคุณใช้ layout-land และคุณมีไฟล์ใน layout-land คุณจะต้องมีไฟล์ในโฟลเดอร์ layout ด้วย


0

ฉันคัดลอกไฟล์ xml ในโฟลเดอร์โดยใช้ Windows Explorer ดูเหมือนว่าจะทำให้เกิดปัญหาการเข้ารหัส หลังจากลบไฟล์และจัดการใน Android Studio ปัญหาได้รับการแก้ไขแล้ว


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.