Ok, então isso está começando a realmente me irritar. Este erro surge de uma forma muito especial, não muito lógica.
Deixe-me começar dizendo que eu já olhei para as outras questões relacionadas a este erro, o Google também. Pelo que eu posso dizer, a maioria dos problemas semelhantes ocorrem porque as pessoas se referem a um String
recurso ou algo diferente no mesmo arquivo de layout, elas colocam '+' em '@ id +' ou algo semelhante.
O problema que estou tendo ocorre em um arquivo de layout .xml com um RelativeLayout
. Este contém umTableLayout
, dois LinearLayout
s contendo algum texto e, finalmente, um ProgressBar
. O que eu quero é que a barra de progresso seja alinhada com o layout relativo usando android:layout_alignParentBottom="true"
e, em seguida, alinhe os dois layouts lineares acima da barra de progresso (o layout linear inferior alinhado acima da barra de progresso, o outro alinhado acima do layout linear inferior).
Deve ser bastante simples e parecer que funciona, ou seja, a visualização gráfica mostra o resultado desejado. No entanto, e aí vem o problema , o Eclipse me dá um erro nos dois layouts lineares,
"Erro: nenhum recurso encontrado que corresponda ao nome fornecido (em 'layout_above' com o valor '@ id / LinearLayout_acc')."
e o mesmo erro para o outro layout linear referente à barra de progresso. Verifiquei mais do que três vezes se não há erros de digitação (os ids também existem em packagename.R.java) e tentei limpar o projeto uma dúzia de vezes.
Não recebo o erro ao salvar (e construir automaticamente), não até decidir executar o projeto. Outra coisa estranha é que quando me refiro ao layout linear inferior da barra de progresso em vez do layout linear superior, não recebo nenhum erro!
Meu arquivo de layout:
<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>
Por favor me ajude, não tenho ideia do que causa este erro!
Editar com respostas
Shrikant veio com a solução de alterar a ordem de aparência no arquivo de layout para que os elementos referenciem apenas outros elementos já definidos quando a referência for lida.
Além disso, como outros postaram, mudar @id/
para @+id/
, mesmo em uma referência, remove as mensagens de erro. Como Marco W. escreveu neste tópico, o que acontece é que você deve usar @+id/
a primeira vez que cada id é mencionado e depois usar @id/
, mesmo que a primeira vez não seja uma definição.
Fiz a maior parte do design e configurei os ids referidos no editor gráfico do Eclipse, de forma que o código que resultou em uma mensagem de erro foi inserido automaticamente. Talvez este seja um bug no Eclipse.
mudança
para
fonte
@id/
fosse para fazer referência a ids existentes,@+id/
para criar novos ids e que eles não poderiam ser trocados. Por que essa abordagem é legal? Eu defino o id duas vezes então?Altere cada id
@id
para@+id
, não importa quando está definindo ou referenciando um id. Com isso, você não vai conseguirfonte
fonte