web-dev-qa-db-ja.com

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

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

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

私が抱えている問題は、RelativeLayoutを含むレイアウト.xmlファイルで発生します。これには、TableLayout、テキストを含む2つのLinearLayout、最後にProgressBarが含まれます。私が望むのは、Android:layout_alignParentBottom="true"を使用して相対的なレイアウトに合わせて進行状況バーを配置し、進行状況バーの上に2つの線形レイアウトを配置することです(下部の線形レイアウトは進行状況バーの上に、もう一方は下部の線形レイアウトの上に配置します) )。

それは十分にシンプルで、動作するように見える必要があります。つまり、グラフィックビューは目的の結果を示しています。ただし、ここで問題が発生します、Eclipseでは2つの線形レイアウトでエラーが発生し、

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

進行状況バーを参照する他の線形レイアウトでも同じエラーが発生します。タイプミス(packagename.R.JavaにもIDが存在する)がないことをトリプルチェックし、プロジェクトのクリーニングを数十回試みました。

プロジェクトの実行を決定するまで、保存(および自動ビルド)時にエラーは発生しません。もう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.が this threadで書いたように、各IDが最初に言及されたときに@+id/を使用し、その後で@id/を使用する必要があります定義ではない場合があります。

ほとんどのデザインを作成し、Eclipseのグラフィカルエディターで参照IDを設定したため、エラーメッセージを生成するコードが自動的に挿入されました。たぶん、これはEclipseのバグです。

91
stemadsen

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

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

また、次の link も確認してください。 Android:layout_below = "@ id/myTextView"は、使用中の要素の後に書き込まれた場合、id "myTextView"の要素を認識しないと書かれています。

77
Shrikant

変化する

@id/LinearLayout_acc

@+id/LinearLayout_acc
84
jeet

すべてのIDを@id@+idに変更します(IDを定義または参照するときは関係ありません)。これでは、取得できません

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

15
AkashG
 <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" >
2