92 votes

Erreur Android xml : "No resource found that matches the given name" avec RelativeLayout (@id/LinearLayout_acc, @id/ProgressBar_statusScreen)

Ok, ça commence vraiment à m'énerver. Cette erreur apparaît d'une manière très spéciale et pas très logique.

Permettez-moi de commencer par dire que j'ai déjà examiné les autres questions relatives à cette erreur et que j'ai également consulté Google. D'après ce que je peux dire, la plupart des problèmes similaires se produisent parce que les gens se réfèrent à une String ou quelque chose d'autre qui ne se trouve pas dans le même fichier de mise en page, ils ont mal placé le '+' dans '@id+' ou quelque chose de similaire.

Le problème que j'ai se produit dans un fichier .xml de mise en page avec un fichier de type RelativeLayout . Celui-ci contient un TableLayout deux LinearLayout contenant du texte et enfin un ProgressBar . Ce que je veux, c'est que la barre de progression soit alignée sur la mise en page relative à l'aide de la fonction android:layout_alignParentBottom="true" et alignez ensuite les deux présentations linéaires au-dessus de la barre de progression (la présentation linéaire inférieure s'alignant au-dessus de la barre de progression, l'autre s'alignant au-dessus de la présentation linéaire inférieure).

Il doit être assez simple et avoir l'air de fonctionner, c'est-à-dire que la vue graphique montre le résultat souhaité. Cependant, et voilà le problème Eclipse me donne une erreur sur les deux tracés linéaires,

"Erreur : No resource found that matches the given name (at 'layout_above' with value '@id/LinearLayout_acc')."

et la même erreur pour l'autre disposition linéaire concernant la barre de progression. J'ai vérifié plus de trois fois qu'il n'y a pas de fautes de frappe (les identifiants existent également dans packagename.R.java), et j'ai essayé de nettoyer le projet une douzaine de fois.

Je n'obtiens pas l'erreur lors de la sauvegarde (et de la construction automatique), mais seulement lorsque je décide d'exécuter le projet. Une autre chose étrange est que lorsque je me réfère à la disposition linéaire inférieure de la barre de progression au lieu de la disposition linéaire supérieure, je n'obtiens aucune erreur !

Mon fichier de mise en page :

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

Aidez-moi, je n'ai aucune idée de la cause de cette erreur !

Modifier avec les réponses

Shrikant a proposé une solution consistant à modifier l'ordre d'apparition dans le fichier de mise en page afin que les éléments ne fassent référence qu'à d'autres éléments déjà définis lorsque la référence est lue.
De plus, comme d'autres l'ont signalé, changer @id/ a @+id/ même dans une référence, ne supprime pas les messages d'erreur. Comme Marco W. l'a écrit dans ce le truc c'est que tu dois utiliser @+id/ la première fois que chaque identifiant est mentionné et ensuite utiliser @id/ après, même si la première fois n'est pas forcément une définition.

J'ai réalisé la majeure partie de la conception et défini les identifiants référencés dans l'éditeur graphique d'Eclipse, de sorte que le code qui entraînait un message d'erreur était automatiquement inséré. Il s'agit peut-être d'un bogue dans Eclipse.

85voto

jeet Points 14950

Cambiar

@id/LinearLayout_acc

à

@+id/LinearLayout_acc

77voto

Shrikant Points 407

Veuillez vérifier le code ci-dessous

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

Vérifiez également les points suivants lien . Il est dit que Android:layout_below="@id/myTextView" ne reconnaîtra pas un élément avec l'id "myTextView" s'il est écrit après l'élément dans lequel vous l'utilisez.

15voto

AkashG Points 3073

Changez chaque identifiant @id a @+id quel que soit le moment où il définit ou fait référence à un id. Ainsi, vous n'obtiendrez pas

Erreur xml Android : "No resource found that matches the given name" avec RelativeLayout (@id/LinearLayout_acc, @id/ProgressBar_statusScreen).

2voto

Hardik Nadiyapara Points 1558
 <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" >

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X