Хорошо, так что это действительно меня раздражает. Эта ошибка появляется очень специальным, не очень логичным способом.
Позвольте мне начать, сказав, что я уже рассмотрел другие вопросы относительно этой ошибки, и Google тоже. Насколько я могу судить, большинство подобных проблем возникают из-за того, что люди ссылаются на ресурс String
или что-то еще не в том же файле макета, они неправильно заменяют "+" на "@id +" или что-то подобное.
Проблема, с которой я столкнулась, встречается в файле .xml макета с RelativeLayout
. Это содержит TableLayout
, два LinearLayout
, содержащие некоторый текст и, наконец, ProgressBar
. Я хочу, чтобы индикатор выполнения выравнивался с относительной компоновкой с помощью android:layout_alignParentBottom="true"
, а затем выравнивал два линейных макета над индикатором выполнения (нижняя линейная компоновка выравнивается над индикатором выполнения, другая выравнивается над нижней линейной компоновкой).
Он должен быть достаточно простым и выглядеть так, как будто он работает, то есть графическое представление показывает желаемый результат. Однако и возникает проблема, Eclipse дает мне ошибку в двух линейных макетах,
"Ошибка: ресурс не найден, который соответствует указанному имени (в 'layout_above' со значением '@id/LinearLayout_acc').
и ту же ошибку для другого линейного макета, ссылающегося на индикатор выполнения. У меня есть более чем трижды проверено, что нет опечаток (id также существует в packagename.R.java), и я пробовал очистить проект дюжину раз.
Я не получаю ошибку при сохранении (и создании авто), пока я не решит запустить проект. Еще одна странность в том, что когда я ссылаюсь на нижний линейный макет из индикатора выполнения вместо верхнего линейного макета, я не получаю ошибки!
Мой файл макета:
<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/
, даже в ссылке, удаляет сообщения об ошибках. Как писал Марко В. в разделе this, вам нужно использовать @+id/
при первом упоминании каждого идентификатора, а затем использовать @id/
после этого, хотя первый раз может не быть определением.
Я сделал большую часть дизайна и установил упомянутый идентификатор в графическом редакторе Eclipse, поэтому код, который привел к сообщению об ошибке, был автоматически вставлен. Возможно, это ошибка в Eclipse.