D'accord, alors ça commence vraiment à m'ennuyer. Cette erreur apparaît d'une manière très spéciale, pas très logique.
Permettez-moi de commencer en disant que j'ai déjà examiné les autres questions concernant cette erreur, Google l'a également fait. Pour autant que je sache, la plupart des problèmes similaires se produisent parce que les gens se réfèrent à une String
ressource ou à quelque chose d'autre qui ne se trouve pas dans le même fichier de mise en page, ils égarent le «+» dans «@ id +» ou quelque chose de similaire.
Le problème que je rencontre se produit dans un fichier de mise en page .xml avec un RelativeLayout
. Celui-ci contient un TableLayout
, deux LinearLayout
s contenant du texte et enfin un ProgressBar
. Ce que je veux, c'est que la barre de progression soit alignée sur la disposition relative en utilisant android:layout_alignParentBottom="true"
, puis alignez les deux dispositions linéaires au-dessus de la barre de progression (la disposition linéaire inférieure s'alignant au-dessus de la barre de progression, l'autre alignant au-dessus de la disposition 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 voici le problème , Eclipse me donne une erreur sur les deux dispositions linéaires,
"Erreur: aucune ressource trouvée correspondant au nom donné (à 'layout_above' avec la valeur '@ id / LinearLayout_acc')."
et la même erreur pour l'autre mise en page linéaire se référant à la barre de progression. J'ai vérifié plus de trois fois qu'il n'y avait 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 l'enregistrement (et de la construction automatique), pas avant que je décide d'exécuter le projet. Une autre chose étrange est que lorsque je fais référence à 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 des réponses
Shrikant est venu avec la solution de changer l'ordre d'apparition dans le fichier de mise en page afin que les éléments ne référencent que d'autres éléments déjà définis lors de la lecture de la référence.
De plus, comme d'autres l'ont publié, le passage @id/
à @+id/
, même dans une référence, supprime les messages d'erreur. Comme l'a écrit Marco W. dans ce fil, le fait est que vous devez utiliser @+id/
la première fois que chaque identifiant est mentionné, puis l'utiliser @id/
ensuite, même si la première fois n'est peut-être pas une définition.
J'ai fait l'essentiel 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é. C'est peut-être un bogue dans Eclipse.
changement
à
la source
@id/
c'était pour faire référence aux identifiants existants,@+id/
pour créer de nouveaux identifiants et que ceux-ci ne pouvaient pas être interchangés. Comment se fait-il que cette approche soit légale? Je définis l'id deux fois alors?Remplacez chaque identifiant
@id
par@+id
, peu importe le moment où il définit ou référence un identifiant. Avec ça, vous n'obtiendrez pasla source
la source