레이아웃의 레이아웃 <layout>에 기본 레이아웃 폴더에 선언이 없습니다. [error]


102

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 켐프 한 번 나에게 UR 로그 캣 보여
비자 야 바르 마 Lanke

@Varma는 실제로 앱이 오류없이 실행됩니다. 내가 XML 파일을 열면 그냥 오류를 볼 수 있지만이 XML 파일의 레이아웃이 정상적으로 실행
L 켐프

fill_parent는 API 8부터 사용되지 않으며 match_parent ViewGroup.LayoutParams
Mahdi Javaheri

@MahdiJavaheri 조언을 해주셔서 감사합니다. 그러나 저는 이미 사용하지 않는 코드를 조금씩 제거하고 있다는 것을 알고 있습니다.
L Kemp

내 경우는, 당신은 또한 작은 대문자로 파일 이름을 변경하여 파일 이름에 관련 문제 확인할 수 있었다
아카 쉬 쿠마을

답변:


145

제 경우에는 Android 스튜디오를 닫고 다시 열면 문제가 해결되었습니다. 프로젝트를 다시 빌드하거나 캐시를 지우는 것은 도움이되지 않았습니다.


3
새 레이아웃 파일을 추가 할 때마다 표시됩니다. 다시 시작 / 재 구축하면 문제가 해결되었지만 근본 원인을 찾은 사람이 있습니까?
HBB20

1
Build> Clean Project로 문제가 해결되었습니다.
Vivid Kraig

57

다음을 시도해 볼 수도 있습니다.

파일 => 캐시 무효화 / 재시작 => 무효화 및 재시작.

스크린 샷


2
예, 도움이되지만 이전 버전에서 Build> Rebuild Project가 도움이되었다는 것이 이상합니다. 뭔가 추락했습니다.
CoolMind

솔루션이 AS 3.2에서 작동하므로 하나의 플러스를 추가했습니다 (내 경우에는 Eclipse 없음).
CoolMind

15

제 경우에는 파일 이름에 대문자를 사용했습니다. 나는 모든 것을 소문자로 남겨두고 수정되었습니다.


이것은 내 문제였습니다. 정말 이상한 버그입니다. 그냥 소문자로 만들었고 모두 좋았습니다.
Panama Jack

10

레이아웃을 고안하는 경우 : layout-sw320dp layout-sw480dp layout-sw600dp layout-sw720dp ....

기본적으로 다음과 같이 레이아웃을 추가해야합니다.

여기에 이미지 설명 입력


7

Gradle 모듈간에 레이아웃 파일을 이동할 때이 오류가 발생했습니다 . 프로젝트를 다시 시작 하고 정리할 때 자체적으로 해결 되므로 캐시무효화 할 때 까지 갈 필요가 없었습니다 . IDE 버그 인 것 같습니다 .Android Studio


5

제 경우에는 다음 과 같이 해결했습니다 .

안드로이드는이 id-error : MissingDefaultResource 를 문서로 말합니다.

리소스가 -land 또는 -en과 같은 한정자가있는 폴더에만 정의되고 기본 폴더 (레이아웃 또는 값 등)에 기본 선언이없는 경우 해당 리소스가 디바이스가있는 디바이스에서 액세스되면 앱이 충돌합니다. 주어진 한정자가없는 구성에 있습니다.

특수한 경우 드로어 블을 기본 폴더에 지정할 필요가 없습니다. 밀도 폴더 (예 : drawable-mdpi)에 일치하는 항목이 있으면 해당 이미지가 사용되고 크기가 조정됩니다. 그러나 drawable-en-hdpi와 같은 폴더에 드로어 블 만 지정하면 영어가 아닌 로케일에서 앱이 중단됩니다.

동일한 한정자 (예 : -fr 스타일)를 가진 다른 리소스에서만 참조되는 -fr 드로어 블과 같은 리소스가 있고 자체적으로 안전한 폴 백이있는 시나리오가있을 수 있습니다. 그러나 이렇게하면 누군가가 실수로 드로어 블을 참조하고 충돌 할 수 있으므로 기본 폴더에 기본 더미 폴백을 만드는 것이 더 안전합니다. 또는 요소에 tools : ignore = "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">

그러나 이것은 쉬운 해결책입니다. 왜냐하면 당신은 안드로이드에서 자원을 놓치기 때문입니다.

파일 시스템 옵션 으로이 문제를 해결합니다 . 경우 안드로이드가 어떤 것을 의미 RESOURSE 실종에 대해 말씀이 없습니다 당신은 그것을 보충해야한다.

\ 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.xmltime_dialog_landscape.xml. 후자의 이름을 변경하여 time_dialog.xml문제를 해결했습니다.



1

나를 위해 다음 단계가 작동했습니다.

  1. 페이지에서 모든 코드를 잘라냅니다 ( Windows의 경우 ctrl+ A+ X).
  2. 코드를 다시 붙여 넣으십시오.

뭔가 내가에 비슷한 문제를 위해 한 strings.xml너무, 나는이 일에 동의
케빈 Murvie

0

이 문제는 스튜디오 또는 컴파일러가 기본 레이아웃 폴더 내에서 리소스 파일을 찾을 수 없기 때문에 발생하는 것 같습니다. 문제를 해결하려면 다른 레이아웃 폴더에 파일을 만들어야 할 수 있습니다. 다른 대상 장치에 대한 레이아웃을 디자인하기 위해 레이아웃 폴더 v21, v25 등의 폴더를 사용하는 경우 리소스 파일도 여기에 배치해야 할 수 있습니다.


0

제 경우에는 값 이름에 사용 된 "잘못된"문자 (점)로 인해이 경고가 나타납니다.

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

점을 제거하면 (이름을 마우스 오른쪽 버튼으로 클릭 한 다음 Android Studio에서 Refactor-Rename) 문제가 해결되었습니다.


0

파티에 늦었지만 제 경우는 위와 다릅니다.

방금 리소스 이름을 바꾸고 작동하기 시작했습니다.

실제로 내 리소스 이름은 ic_menu_black_24dp.xml이어서 안드로이드의 메뉴 리소스와 충돌했습니다.


시스템 리소스가 다른 네임 스페이스에 있기 때문에 충돌해서는 안되며, 그렇더라도 로컬 복사본으로 재정의하는 것이 좋습니다.
Brill Pappin

1
실제로 나는 OP와 같은 오류가 발생했는데 위에 나열되지 않은 다른 이유로 인해 위의 단계에서 해결했습니다.
Ashish Shukla

0

나를 위해 일한 것은 id 속성을 제거하는 것입니다.

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

레이아웃 리소스에서.


0

나를 위해 해결 한 이유 :

Android Studio에서 레이아웃 디렉토리의 파일 이름을 마우스 오른쪽 버튼으로 클릭 하고 다음 화면에서 특별한 체크 박스를 선택하지 않고 Reformat code를 선택합니다 .

여기 후드 아래에서 정확히 무슨 일이 일어나는지 확실하지 않지만 작동했습니다.


0

XML 레이아웃 파일에 코드를 복사 / 붙여 넣기 한 후 문제가 발생했지만 파일을 수동으로 생성하여 문제를 해결했습니다. 코드가 똑같 았기 때문에 매우 이상하지만 어떻게 든이 문제를 해결했습니다. 다시 시작하고 "파일 => 캐시 무효화 / 다시 시작 => 무효화 및 다시 시작"수정을 시도했지만 문제는 파일을 수동으로 다시 생성해야만 해결되었습니다.


0

당신이 (같은 레이아웃의 다른 버전 사용할 때 대형 / 소형 / Nornal을 그 사건을) 당신은 같은 메인 레이아웃 폴더에 있습니다. 이렇게

여기에 이미지 설명 입력



0

제 경우에는 레이아웃 랜드 파일과 레이아웃 파일 이름이 다르기 때문에 동일한 오류가 표시되었습니다.

마이 케이스 : layout-land-> my_layout_land 레이아웃-> my_layout

두 파일 이름을 동일하게 만들어 해결했습니다. 레이아웃 랜드를 사용 중이고 레이아웃 랜드에 파일이있는 경우 레이아웃 폴더에도 파일이 있어야합니다.


0

Windows 탐색기를 사용하여 폴더의 xml 파일을 복사했습니다. 인코딩 문제가 발생한 것 같습니다. 파일을 삭제하고 Android Studio 내에서 복사 한 후 문제가 해결되었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.