O layout <layout> no layout não tem declaração na pasta de layout base [erro]

102

Depois de migrar para o Android Studio 3.2, API 28, estou recebendo o seguinte erro no layout do meu aplicativo:

O layout no layout não tem declaração na pasta de layout base; isso pode levar a travamentos quando o recurso é consultado em uma configuração que não corresponde a este qualificador

Um dos layouts em que estou recebendo esse erro é:

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

Recebo o erro na primeira linha do primeiro LinearLayout.

Alguém sabe como resolver esse erro?

Obrigado

ATUALIZAÇÃO: Respondeu minha pergunta com o que resolveu o problema para mim

L Kemp
fonte
@L Kemp uma vez, mostre-me seu logcat
Vijaya Varma Lanke
@Varma, na verdade, o aplicativo é executado sem erros. Só consigo ver o erro quando abro o arquivo xml, mas o layout desse arquivo xml funciona normalmente
L Kemp
fill_parent está obsoleto desde a API 8 e substituído por match_parent ViewGroup.LayoutParams
Mahdi Javaheri
@MahdiJavaheri Obrigado por seu conselho, porém, eu já sabia disso, estou removendo esse código obsoleto aos poucos.
L Kemp,
No meu caso, era um problema relacionado ao nome do arquivo, você também pode verificar renomeando seu arquivo em versalete
Akash kumar

Respostas:

145

No meu caso, fechar e reabrir o Android Studio resolveu o problema. Reconstruir o projeto ou limpar o cache não ajudou.

vovahost
fonte
3
Estou vendo isso sempre que adiciono um novo arquivo de layout. Reiniciar / reconstruir corrige, mas alguém encontrou a causa raiz disso?
HBB20,
1
Observe que Build> Clean Project resolveu o problema para mim.
Vivid Kraig
57

Você também pode tentar isso:

Arquivo => Invalidar Caches / Reiniciar => Invalidar e Reiniciar.

captura de tela

Itoun
fonte
2
Sim, ajuda, mas é estranho que nas versões anteriores Build> Rebuild Project ajudasse. Eles bateram em algo.
CoolMind
Eu adicionei um plus para você, pois suas soluções funcionam para AS 3.2 (no meu caso sem Eclipse).
CoolMind
15

No meu caso foi o uso de letras maiúsculas no nome do arquivo. Deixei tudo em minúsculas e foi corrigido.

Zioh
fonte
Esse era o meu problema. Que bug estranho. Apenas coloquei em letras minúsculas e tudo ficou bom.
Panama Jack
10

Se você planejar seu layout: layout-sw320dp layout-sw480dp layout-sw600dp layout-sw720dp ....

você deve adicionar layout por padrão como este:

insira a descrição da imagem aqui

Ayoub Anbara
fonte
7

Recebi este erro ao mover arquivos de layout entre módulos do Gradle . Não precisei ir tão longe a ponto de invalidar caches, pois isso se resolveu quando reiniciei Android Studioe limpei o projeto . Parece provável que seja um bug do IDE .

Travis Castillo
fonte
5

No meu caso, resolvi isso com o seguinte :

o Android me diz este id-erro: MissingDefaultResource como documentação diz:

Se um recurso for definido apenas em pastas com qualificadores como -land ou -en, e não houver declaração padrão na pasta base (layout ou valores etc.), o aplicativo irá travar se esse recurso for acessado em um dispositivo onde o dispositivo está em uma configuração sem o qualificador fornecido.

Como um caso especial, os drawables não precisam ser especificados na pasta base; se houver uma correspondência em uma pasta de densidade (como drawable-mdpi), essa imagem será usada e dimensionada. Observe, entretanto, que se você especificar um drawable em uma pasta como drawable-en-hdpi, o aplicativo irá travar em localidades diferentes do inglês.

Pode haver cenários em que você tenha um recurso, como um drawable -fr, que só é referenciado por algum outro recurso com os mesmos qualificadores (como um estilo -fr), que por si só tem fallbacks seguros. No entanto, isso ainda possibilita que alguém acidentalmente faça referência ao drawable e trave, por isso é mais seguro criar um fallback fictício padrão na pasta base. Como alternativa, você pode suprimir o problema adicionando ferramentas: ignore = "MissingDefaultResource" no elemento.

(Este cenário ocorre frequentemente com traduções de strings, onde você pode excluir o código e os recursos correspondentes, mas se esquecer de excluir uma tradução. Há um id de problema dedicado para esse cenário, com o 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">

Mas esta é a solução fácil, pois faz falta o recurso no Android.

Eu resolvo isso com a opção de sistema de arquivos . Se o Android informar sobre a falta de recursos, significa que algo está faltando e você deve reabastecê-los.

você deve ir para \ app \ src \ main \ res

talvez: clique com o botão direito na pasta ausente do arquivo, mostre no Exporer e volte para \ app \ src \ main \ res

Você deve ser encontrado

/layout

/layout-normal

/layout-large

/some more folders

Você deve encontrar onde os arquivos estão faltando. No meu caso, isso está faltando em / layout

Walter Palacios
fonte
5

eu apenas fiz Build > Clean Project

rmirabelle
fonte
3

No meu caso, esse problema foi causado por letras maiúsculas. Caracteres errados como "-" também podem causar o problema. Alterei o nome de Activity_disease.xmlpara activity_disease.xmle o problema foi corrigido.

Dani Nuñez
fonte
2

Nada funcionou para mim como reconstruir o projeto ou invalidar o cache. No meu caso, fechar e reabrir o Android Studio resolveu o problema .

Rahul
fonte
1

No meu caso, parece que o Google costumava esperar (ou pelo menos aceitar) nomes diferentes entre layouts diferentes; Eu tive um time_dialog.xmle um time_dialog_landscape.xml. Renomeando o último para time_dialog.xmlcorrigir o problema.

John Perry
fonte
1

Resolvi esse problema apenas sincronizando o projeto com o Gradle

memresubasi
fonte
1

Para mim, as etapas a seguir fizeram com que funcionasse:

  1. Corte todo o código da página ( ctrl+ A+ Xpara janelas)
  2. Cole o código de volta.
Vander
fonte
Algo que fiz para um problema semelhante strings.xmltambém, concordo com este aqui
Kevin Murvie
0

Este problema parece estar acontecendo porque o studio ou compilador não consegue encontrar o arquivo de recursos dentro da pasta de layout base. Para resolver o problema, pode ser necessário criar o arquivo em diferentes pastas de layout. Se você estiver usando pastas de layout v21, v25 etc. pastas para projetar layouts para diferentes dispositivos de destino, você também pode precisar colocar seus arquivos de recurso lá.

rintu
fonte
0

No meu caso, este aviso apareceu devido ao caractere "errado" (ponto) usado no nome do valor:

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

Remover pontos (clique com o botão direito em um nome e, em seguida, Refactor-Rename no Android Studio) resolveu o problema.

Taha
fonte
0

Atrasado para a festa, mas Meu caso é diferente de cima.

Acabei de renomear o recurso e ele começou a funcionar.

Na verdade, meu nome de recurso era ic_menu_black_24dp.xml, por isso estava em conflito com o recurso de menu do android.

Ashish Shukla
fonte
ele não deve entrar em conflito, uma vez que os recursos do sistema estão em um namespace diferente e, mesmo se estivessem, substituir sua cópia local deveria estar bem.
Brill Pappin
1
Na verdade, recebi o mesmo erro do OP devido a outros motivos não listados acima, então resolvi pelo passo acima. Postei este caso alguém enfrente um problema como o meu e possa obter ajuda.
Ashish Shukla
0

O que funcionou para mim foi remover o atributo id

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

do recurso de layout.

Ruud Siebierski
fonte
0

O que resolveu para mim:

No Android Studio, clique com o botão direito do mouse no nome do arquivo no diretório de layout e escolha Reformatar código , sem nenhuma caixa de seleção especial selecionada na tela seguinte.

Não tenho certeza do que exatamente acontece sob o capô aqui, mas funcionou.

Razvan_TK9692
fonte
0

Tive um problema depois de copiar / colar o código em um arquivo de layout XML, mas resolvi apenas criando o arquivo manualmente. Muito estranho, já que o código era exatamente o mesmo, mas de alguma forma ele corrigiu esse problema. Tentei reiniciar e fazer a correção "Arquivo => Invalidar Caches / Reiniciar => Invalidar e Reiniciar", mas o problema só foi corrigido recriando manualmente o arquivo.

oggynator
fonte
0

Note que quando você está usando diferentes versões de layout como ( Grande / Pequeno / Nornal ) então nesse caso você tem a mesma pasta de layout principal. assim

insira a descrição da imagem aqui

pankaj kumar
fonte
0

(1) Exclua o layout original.

(2) Adicione o layout novamente.

Passo 1

Passo 2

Liqiang
fonte
0

No meu caso, o mesmo erro foi mostrado porque o arquivo de layout e o nome do arquivo de layout eram diferentes.

Meu caso: layout-land -> layout my_layout_land -> my_layout

Resolvi o problema tornando os nomes de arquivo iguais. Porque se você estiver usando layout-land e tiver um arquivo no layout-land, então você deve ter um arquivo na pasta de layout também.

Ujjawal Kumar
fonte
0

Copiei os arquivos xml da pasta usando o Windows Explorer. Parece ter causado um problema de codificação. Depois de excluir os arquivos e copiá-los dentro do Android Studio, o problema foi resolvido.

L Kemp
fonte