web-dev-qa-db-ja.com

レイアウトのレイアウト<layout>には、ベースレイアウトフォルダーに宣言がありません[エラー]

EclipseからAndroid St​​udio 3.2、API 28の新しいバージョンに移行した後、アプリのレイアウトで次のエラーが表示されます。

レイアウトのレイアウトには、ベースレイアウトフォルダーに宣言がありません。これは、この修飾子と一致しない構成でリソースが照会されるとクラッシュする可能性があります

このエラーが発生しているレイアウトの1つは次のとおりです。

<?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の最初の行でエラーが発生します。

誰もこのエラーを解決する方法を知っていますか?

ありがとうございました

更新:エンコードの問題のようです。Windowsエクスプローラを使用してフォルダ内のxmlファイルをコピーしました。ファイルを削除してAndroid St​​udio内にコピーした後、問題は解決しました。 。

47
L Kemp

私の場合、Androidスタジオを閉じて再度開くと問題が解決しました。プロジェクトを再構築するか、キャッシュを無効化しても解決しませんでした。

57
vovahost

これを試すこともできます:

ファイル=>キャッシュの無効化/再起動=>無効化と再起動。

screenshot

27
Itoun

レイアウトを考案する場合:layout-sw320dp layout-sw480dp layout-sw600dp layout-sw720dp

このようにデフォルトでレイアウトを追加する必要があります:

enter image description here

6
Anbara Ayoub

私の場合、 this で解決しました:

Androidは私にこう言いますid-error: MissingDefaultResource

リソースが-landや-enのような修飾子を持つフォルダーでのみ定義され、ベースフォルダー(レイアウトや値など)にデフォルトの宣言がない場合、そのリソースがデバイスでアクセスされるとアプリがクラッシュします指定された修飾子が欠落している構成にあります。

特別な場合として、ドロアブルをベースフォルダーで指定する必要はありません。密度フォルダー(drawable-mdpiなど)に一致するものがある場合、その画像が使用され、スケーリングされます。ただし、drawable-en-hdpiなどのフォルダーでドロアブルのみを指定すると、英語以外のロケールでアプリがクラッシュすることに注意してください。

-fr drawableなど、同じ修飾子を持つ他のリソース(-frスタイルなど)からのみ参照されるリソースがあり、それ自体に安全なフォールバックがあるシナリオがあります。ただし、これにより、誰かが誤ってドロアブルを参照してクラッシュする可能性があるため、ベースフォルダーにデフォルトのダミーフォールバックを作成する方が安全です。または、要素にtools:ignore = "MissingDefaultResource"を追加して、問題を抑制することができます。

(このシナリオは、コードと対応するリソースを削除しても、翻訳の削除を忘れる可能性がある文字列翻訳で頻繁に発生します。このシナリオには、ExtraTranslationというIDを持つ専用の課題IDがあります。)

 <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のリソースが不足しているためです。

これをfile systemオプションで解決します。 Androidがリソースの欠落について通知する場合、何かが欠落していることを意味するため、それを補充する必要があります。

\ app\src\main\resに移動する必要があります

多分:ファイルのないフォルダーを右クリックし、Exporerに表示して、\ app\src\main\resに戻る

あなたは見つけるはずです

/layout

/layout-normal

/layout-large

/some more folders

ファイルがどこにないのかがわかるはずです。私の場合、それは/ layoutにありません

3
Walter Palacios

私の場合、Googleは異なるレイアウト間で異なる名前を期待していた(または少なくとも受け入れた)ようです。 time_dialog.xmltime_dialog_landscape.xmlがありました。後者の名前をtime_dialog.xmlに変更すると、問題が修正されました。

1
John Perry

Gradleモジュール間でレイアウトファイルを移動すると、このエラーが発生しました。 Android St​​udioを再起動してプロジェクトをクリーンアップすると、キャッシュが無効になるまでキャッシュを無効にする必要はありませんでした。 IDEバグのようです。

1
Travis Castillo

私の場合、この問題は大文字が原因でした。 「-」などの間違った文字も問題の原因になります。名前をActivity_disease.xmlからactivity_disease.xmlに変更し、問題を修正しました。

1
Dani Nuñez

私のために働いたのは、id属性を削除することです

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

レイアウトリソースから。

0
Ruud Siebierski

パーティーに遅れましたが、私の場合は上記とは異なります。

私はただリソースの名前を変更しましたと動作し始めました。

実際、私のリソース名はic_menu_black_24dp.xmlであったため、Androidのメニューリソースと競合していました。

0
Ashish Shukla

私の場合、値名に「間違った」文字(ドット)が使用されているため、この警告が表示されました。

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

ドットを削除する(名前を右クリックし、Android St​​udioでRefactor-Renameする)ことで問題が解決しました。

0
Taha

この問題は、スタジオまたはコンパイラがベースレイアウトフォルダ内のリソースファイルを見つけることができないために発生しているようです。この問題を解決するには、ファイルを異なるレイアウトフォルダーに作成する必要がある場合があります。異なるターゲットデバイスのレイアウトを設計するためにレイアウトフォルダーv21、v25などのフォルダーを使用している場合は、リソースファイルもそこに配置する必要があります。

0
rintu

プロジェクトをgradleと同期するだけでこの問題を解決しました

0
memresubasi