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


92

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

まず、このエラーに関する他の質問についてはすでに説明しましたが、Googleも同じだと言いました。私の知る限り、ほとんどの同様の問題Stringは、同じレイアウトファイル内にないリソースまたはその他のものを参照するために発生し、「+」を「@ id +」または同様の何かに誤って配置します。

私が抱えている問題は、.xmlファイルのレイアウトで発生しますRelativeLayout。これには、テキストを含むTableLayout2つLinearLayoutのが含まれ、最後にが含まれますProgressBar。私が欲しいのは、プログレスバーを使用して相対レイアウトにandroid:layout_alignParentBottom="true"揃え、次にプログレスバーの上に2つの線形レイアウトを配置することです(一番下の線形レイアウトはプログレスバーの上に配置され、もう一方は下の線形レイアウトの上に配置されます)。

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

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

進行状況バーを参照する他の線形レイアウトについても同じエラーが発生します。タイプミスがないこと(パッケージ名.R.javaにもIDが存在すること)を3回以上確認し、プロジェクトを数十回クリーニングしようとしました。

プロジェクトの実行を決定するまでは、保存(および自動ビルド)のときにエラーが発生しません。もう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のバグです。

回答:


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"の要素を認識しないと言っています。


8
このコメントをありがとう:android:layout_below = "@ id / myTextView"は、で使用している要素の後に記述されている場合、IDが「myTextView」の要素を認識しません。これで問題が修正されましたが、要素を「正しい」順序で記述しなければならないのは馬鹿げていると思いますが、おそらくバグです。
steadsen

4
確かにこれはバグです。レイアウトIDは、定義の順序とは無関係である必要があります。特に、Android Studioのオンスクリーンレイアウトデザイナーが問題を抱えていないことは不愉快です。
dodgy_coder 2015年

@stemadsenそれはバグではありません。パーサーは単にビューを作成し、ビュー要素に最初に出会ったときにそれがリフレレンス(Id)になります。訪問されていない要素を参照しています。AがBの下に自分自身を定義し、後でBがAの下に自分自身を定義するシナリオを考えてみます。順序付けの制限により論理的な問題が解決されます
Masoud Dadashi

ここで私にコメントさせてください。それ以降(以前ではなく)記述されたUI要素に対して、作業中のUI要素を参照することはできません。
ivanleoncz

85

変化する

@id/LinearLayout_acc

@+id/LinearLayout_acc

3
うわー、これは実際に動作します。私が考えた@id/、既存のIDを参照するためだった@+id/新規IDの作成のために、これらができることではない交換すること。このアプローチがなぜ合法なのですか?私はそのときIDを2回定義しますか?
steadsen 2012

実際には、idのlong値であり、@ + id /は何らかのlong値を指します。また、あるコンポーネントにid値を割り当てた場合、このidのみを使用してビューを参照できます。
jeet

他のすべてのレイアウトでは、@ + id /ではなく@ id /を使用して他のIDを参照するため、これは奇妙に聞こえます。また、Shrikantが以下で説明するように、参照される要素の順序を変更すると、@ id /で機能します。
steadsen 2012

1
画面に表示される順序で要素を相対レイアウトに保持する本当に良い方法です。まさに私が探していたものです。
GLee

2
かしこまりました!その男にメダルを与えます。後でレイアウトで作成されるビューを参照する必要がある場合、これはまさにあなたがしなければならないことです。
Yoraco Gonzales 2017

15

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

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


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