92

さて、これは本当に私を悩ませ始めています。このエラーは非常に特殊な方法で表示されますが、論理的ではありません。

まず、このエラーに関する他の質問を既に確認したことから始めましょう。Google も同様です。私が知る限り、ほとんどの同様の問題は、人々Stringが同じレイアウト ファイル内にないリソースまたは何かを参照するために発生し、'@id+' 内の '+' などを誤って配置するためです。

私が抱えている問題は、.xml を持つレイアウト .xml ファイルで発生しますRelativeLayout。これには、いくつかのテキストを含むTableLayout2 つの が含まれ、最後に. 私が望むのは、プログレスバーを相対的なレイアウトに合わせてから、プログレスバーの上に2つのリニアレイアウトを揃えることです(下のリニアレイアウトはプログレスバーの上に揃え、もう1つは下のリニアレイアウトの上に揃えます)。LinearLayoutProgressBarandroid:layout_alignParentBottom="true"

それは十分に単純で、機能しているかのように見える必要があります。つまり、グラフィック ビューに目的の結果が表示されます。ただし、ここで問題が発生します.Eclipseは2つの線形レイアウトでエラーを出します.

「エラー: 指定された名前 ('layout_above' で値 '@id/LinearLayout_acc') に一致するリソースが見つかりませんでした。」

プログレスバーを参照する他の線形レイアウトでも同じエラーが発生します。タイプミスがないことを 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のバグです。

4

4 に答える 4

85

変化する

@id/LinearLayout_acc

@+id/LinearLayout_acc
于 2012-07-26T11:56:55.143 に答える
77

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

<?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" を持つ要素を認識しないと言われています。

于 2012-07-26T12:41:56.850 に答える
15

id を定義または参照するタイミングに関係なく、すべての id@idをに変更します。@+idこれで、あなたは得られません

Android xml エラー: RelativeLayout (@id/LinearLayout_acc、@id/ProgressBar_statusScreen) で「指定された名前に一致するリソースが見つかりません」。

于 2012-07-26T11:58:57.997 に答える
2
 <LinearLayout
        android:id="@+id/LinearLayout_dist"
        android:layout_above="@+id/LinearLayout_acc" <--- here might be a problem you forgot + sign
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginBottom="10dp" >
于 2012-07-26T12:02:53.590 に答える