1. ホーム
  2. android

[解決済み] Android xml エラー。RelativeLayout (@id/LinearLayout_acc, @id/ProgressBar_statusScreen) で "No resource found that matches the given name" が発生しました。

2023-03-03 11:51:31

質問

さて、これは本当に私を悩ませ始めていることです。このエラーは、非常に特殊で、あまり論理的でない方法でポップアップします。

まず最初に、私はこのエラーに関する他の質問をすでに見て、Google で検索したことをお伝えします。私が知る限り、同様の問題のほとんどは、人々が String リソースまたは同じレイアウト ファイル内ではない何かを参照している場合、'@id+' または同様のものに '+' を置き換えています。

私が抱えている問題は、レイアウト .xml ファイルで RelativeLayout . これには TableLayout を含んでおり、2つの LinearLayout がテキストを含み、最後に ProgressBar . 私が欲しいのは、プログレスバーが android:layout_alignParentBottom="true" を使用して、プログレスバーの上に2つの線形レイアウトを整列させることです(下の線形レイアウトはプログレスバーの上に整列し、もう一方は下の線形レイアウトの上に整列する)。

これは十分に単純で、動作しているように見えます。つまり、グラフィック ビューは望ましい結果を示しています。しかし ここで問題が発生します。 Eclipseは2つの線形レイアウトで私にエラーを出します。

"エラー。与えられた名前に一致するリソースが見つかりません (at 'layout_above' with value '@id/LinearLayout_acc').".Error: 与えられた名前に一致するリソースが見つかりません。

と、プログレス バーを参照する他の線形レイアウトのための同じエラーが発生します。タイプミスがないことを 3 回以上確認し (id は packagename.R.java にも存在します)、プロジェクトを何十回もクリーニングしようとしました。

保存 (および自動構築) 時にエラーは発生せず、プロジェクトの実行を決定するまでエラーは発生しません。もう 1 つの奇妙なことは、上部の線形レイアウトの代わりに、プログレス バーから下部の線形レイアウトを参照するとき、私はエラーを受け取りません!

私のレイアウト ファイル。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/background_activity" >
        <TableLayout
             ... />

        <LinearLayout
            android:id="@+id/LinearLayout_dist"
            android:layout_above="@id/LinearLayout_acc"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_marginBottom="10dp" >

            <TextView
                ... />

            <TextView
                ... />
        </LinearLayout>

        <LinearLayout
            android:id="@+id/LinearLayout_acc"
            android:layout_above="@id/ProgressBar_statusScreen"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true" >

            <TextView
                ... />

            <TextView
                ... />
        </LinearLayout>

        <ProgressBar
            android:id="@+id/ProgressBar_statusScreen"
            style="?android:attr/progressBarStyleHorizontal"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_margin="16dp" />

</RelativeLayout>

このエラーの原因が全くわかりません!助けてください。

回答とともに編集する

Shrikantは、レイアウトファイルの出現順序を変更し、参照が読み込まれたときに、要素がすでに定義されている他の要素のみを参照するようにするという解決策を思いつきました。

また、他の人が投稿しているように @id/@+id/ に変更すると、たとえ参照であっても、エラーメッセージを消すことができます。Marco W. が書いたように この スレッドで書いているように @+id/ を使い、次に各 ID が言及されたときに @id/ を使用します。ただし、最初の回が定義でない場合もあります。

私はEclipseのグラフィカルエディターでデザインのほとんどを作り、参照するidを設定したので、エラーメッセージになるコードが自動的に挿入されました。もしかしたら、これは Eclipse のバグかもしれません。

解決方法は?

以下のコードを確認してください。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/ic_launcher" >

<TableLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

<LinearLayout
    android:id="@+id/LinearLayout_dist"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_above="@+id/LinearLayout_acc"
    android:layout_centerHorizontal="true"
    android:layout_marginBottom="10dp" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="FIRST" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="SECOND" />
   </LinearLayout>

   <LinearLayout
    android:id="@+id/LinearLayout_acc"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_above="@+id/ProgressBar_statusScreen"
    android:layout_centerHorizontal="true" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="THIRD" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="FOURTH" />
   </LinearLayout>

   <ProgressBar
    android:id="@+id/ProgressBar_statusScreen"
    style="?android:attr/progressBarStyleHorizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_margin="16dp" />

 </RelativeLayout>

また、以下を確認してください。 リンク . android:layout_below="@id/myTextView" が、使用している要素の後に書かれていると、id "myTextView" の要素を認識しない、と書いてありますね。