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


97

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

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

ありがとうございました

更新:私にとって問題を解決したもので私の質問に答えました


@Lケンプはかつて私にあなたのlogcatを見せてくれました
Vijaya Varma

@Varmaは、実際にはアプリがエラーなしで実行されます。xmlファイルを開くとエラーが表示されますが、このxmlファイルのレイアウトは正常に実行されます
L Kemp

fill_parentはAPI8以降非推奨になり、match_parent ViewGroup.LayoutParamsに
Mahdi Javaheri 2018年

@MahdiJavaheriアドバイスありがとうございますが、私はすでにそれを知っています、私はその非推奨のコードを少しずつ削除しています。
Lケンプ

私の場合、ファイル名に関連する問題でした。ファイル名をスモールキャップスで変更して確認することもできます
Akash kumar

回答:


135

私の場合、Android Studioを閉じて再度開くと、問題が解決しました。プロジェクトを再構築したり、キャッシュをクリアしたりしても役に立ちませんでした。


3
新しいレイアウトファイルを追加するたびにこれが表示されます。再起動/再構築すると修正されますが、根本的な原因は誰か見つかりましたか?
HBB20

[ビルド]> [クリーンプロジェクト]で問題が解決したことに注意してください。
Vivid Kraig

54

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

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

スクリーンショット


2
はい、それは役に立ちますが、奇妙なことに、以前のバージョンでは、ビルド>プロジェクトの再構築が役立ちました。彼らは何かを墜落させた。
CoolMind

あなたのソリューションはAS3.2(私の場合はEclipseなし)で機能するので、私はあなたに1つのプラスを追加しました。
CoolMind 2018年

15

私の場合、ファイル名に大文字を使用していました。私はすべてを小文字のままにして、それを修正しました。


これが私の問題でした。なんて奇妙なバグでしょう。小文字にしただけで、すべて良かったです。
パナマジャック

10

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

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

ここに画像の説明を入力してください


6

Gradleモジュール間でレイアウトファイルを移動するときにこのエラーが発生しましプロジェクトを再起動してクリーンアップしたときにキャッシュが自動的に解決されたため、キャッシュ無効にするまでに行く必要はありませんでした。それは可能性が高いと思われるIDEのバグAndroid Studio


5

私の場合、私はこれでそれを解決しまし

Androidは私にこのIDエラーを言います:ドキュメントが言うように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">

しかし、これは簡単な解決策です。'Androidでリソースを逃してしまうからです。

私はこれをファイルシステムオプションで解決します。場合Androidはいくつかのことを意味する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 Studioを閉じて再度開くと、問題が解決しました


1

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


1

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


1

私にとって、次の手順で機能しました。

  1. ページのすべてのコードを切り取り(ctrl+ A+ XWindows用)
  2. コードを貼り付けます。

同様の問題に対して私がしたことstrings.xmlも、私はこれに同意します
KevinMurvie19年

0

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


0

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

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

ドットを削除すると(名前を右クリックしてから、Android Studioでリファクタリング-名前の変更)、問題が解決しました。


0

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

私は、リソースの名前を変更し、それが仕事を始めました。

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


システムリソースは別の名前空間にあるため、競合することはありません。競合している場合でも、ローカルコピーでオーバーライドしても問題ありません。
ブリルパピン

1
実際、上記以外の理由でOPと同じエラーが発生したので、上記の手順で解決しました。誰かが私のような問題に直面した場合に備えて、これを投稿しました。
Ashish Shukla

0

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

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

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


0

私にとってそれを解決したもの:

Android Studioで、レイアウトディレクトリのファイル名を右クリックし、[コードの再フォーマット]を選択します。次の画面では、特別なチェックボックスは選択されていません。

ここでボンネットの下で何が起こっているのか正確にはわかりませんが、それはうまくいきました。


0

コードをXMLレイアウトファイルにコピーして貼り付けた後に問題が発生しましたが、ファイルを手動で作成するだけで修正しました。コードがまったく同じだったので非常に奇妙ですが、どういうわけかそれはこの問題を修正しました。再起動して「ファイル=>キャッシュの無効化/再起動=>無効化して再起動」の修正を試みましたが、ファイルを手動で再作成することによってのみ問題が修正されました。


0

Large / Small / Nornal)のような異なるバージョンのレイアウトを使用している場合、その場合は同じメインレイアウトフォルダが必要であることに注意してください。このように

ここに画像の説明を入力してください



0

私の場合、layout-landファイルとlayoutファイル名が異なるため、同じエラーが表示されていました。

私の場合:layout-land-> my_layout_land layout-> my_layout

両方のファイル名を同じにすることで解決しました。なぜなら、layout-landを使用していて、layout-landにファイルがある場合は、layoutフォルダーにもファイルが必要だからです。


0

Windowsエクスプローラーを使用してフォルダー内のxmlファイルをコピーしました。エンコーディングの問題が発生したようです。ファイルを削除してAndroidStudio内で対処した後、問題は解決しました。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.