Error xml de Android: "No se encontró ningún recurso que coincida con el nombre de pila" con RelativeLayout (@ id / LinearLayout_acc, @ id / ProgressBar_statusScreen)

92

Bien, esto está empezando a molestarme mucho. Este error aparece de una manera muy especial, no muy lógica.

Permítanme comenzar diciendo que ya he examinado las otras preguntas relacionadas con este error, que también lo busqué en Google. Por lo que puedo decir, la mayoría de los problemas similares ocurren porque las personas se refieren a un Stringrecurso o algo más que no está dentro del mismo archivo de diseño, pierden el '+' en '@ id +' o algo similar.

El problema que tengo ocurre en un archivo de diseño .xml con extensión RelativeLayout. Este contiene a TableLayout, dos LinearLayouts que contienen algo de texto y finalmente un ProgressBar. Lo que quiero es que la barra de progreso se alinee con el diseño relativo usando android:layout_alignParentBottom="true"y luego alinee los dos diseños lineales encima de la barra de progreso (el diseño lineal inferior se alinea sobre la barra de progreso, el otro se alinea sobre el diseño lineal inferior).

Debe ser lo suficientemente simple y parece que funciona, es decir, la vista gráfica muestra el resultado deseado. Sin embargo, y aquí viene el problema , Eclipse me da un error en los dos diseños lineales,

"Error: no se encontró ningún recurso que coincida con el nombre dado (en 'layout_above' con el valor '@ id / LinearLayout_acc')".

y el mismo error para el otro diseño lineal referido a la barra de progreso. He comprobado más del triple que no hay errores tipográficos (la identificación también existe en packagename.R.java), y he intentado limpiar el proyecto una docena de veces.

No recibo el error al guardar (y autoconstruir), no hasta que decido ejecutar el proyecto. Otra cosa extraña es que cuando me refiero al diseño lineal inferior de la barra de progreso en lugar del diseño lineal superior, ¡no obtengo ningún error!

Mi archivo de diseño:

<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 ayuda, no tengo idea de qué causa este error!

Editar con respuestas

Shrikant vino con la solución de cambiar el orden de aparición en el archivo de diseño para que los elementos hagan referencia solo a otros elementos ya definidos cuando se lee la referencia.
Además, como otros han publicado, cambiar @id/a @+id/, incluso en una referencia, elimina los mensajes de error. Como escribió Marco W. en este hilo, lo que pasa es que debes usar @+id/la primera vez que se menciona cada id y luego usarla @id/después, aunque la primera vez no sea una definición.

Hice la mayor parte del diseño y configuré las identificaciones referidas en el editor gráfico de Eclipse, por lo que el código que resultó en un mensaje de error se insertó automáticamente. Quizás esto sea un error en Eclipse.

Stemadsen
fuente

Respuestas:

77

Comprueba el siguiente código

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

Consulte también el siguiente enlace . Dice que android: layout_below = "@ id / myTextView" no reconocerá un elemento con id "myTextView" si está escrito después del elemento en el que lo estás usando.

Shrikant
fuente
8
Gracias por este comentario: android: layout_below = "@ id / myTextView" no reconocerá un elemento con id "myTextView" si está escrito después del elemento en el que lo estás usando . Esto solucionó el problema, aunque creo que es ridículo que tengas que escribir los elementos en el orden "correcto" ... Posiblemente un error.
stemadsen
4
Seguro que esto es un error. Los ID de diseño deben ser independientes del orden de definición. Es especialmente molesto que el diseñador de diseño en pantalla en Android Studio no tenga problemas con eso.
dodgy_coder
@stemadsen no es un error. parser simplemente crea la vista y sus referencias (Id) la primera vez que se encuentra con el elemento de vista. está haciendo referencia a un elemento no visitado. considere un escenario que A se define a sí mismo debajo de B y luego B se define a sí mismo debajo de A. la limitación del orden resuelve el problema lógico
Masoud Dadashi
Permítanme comentar aquí: no es posible hacer referencias en el elemento de la interfaz de usuario en el que está trabajando para los elementos de la interfaz de usuario escritos DESPUÉS (no antes).
ivanleoncz
85

cambio

@id/LinearLayout_acc

a

@+id/LinearLayout_acc
jeet
fuente
3
Vaya, esto realmente funciona. Pensé que @id/era para hacer referencia a las identificaciones existentes, @+id/para crear nuevas identificaciones y que estas no se podían intercambiar. ¿Por qué este enfoque es legal? ¿Defino la identificación dos veces entonces?
stemadsen
en realidad, es un valor largo para id, @ + id / se refiere a algún valor largo. y si asignamos algún valor de identificación a algún componente, entonces podemos usar solo esta identificación para hacer referencia a las vistas.
jeet
Esto suena extraño, porque en todos los demás diseños hago referencia a otras identificaciones con @ id / y no @ + id /. Además, como Shrikant señaló a continuación, si cambio el orden de los elementos referenciados, funciona con @ id /.
stemadsen
1
Una forma realmente agradable de mantener los elementos en un diseño relativo en el orden en que aparecerán en la pantalla, exactamente lo que estaba buscando.
GLee
2
¡SÍ SEÑOR! Dar a ese hombre una medalla. Esto es exactamente lo que debe hacer, si es necesario para hacer referencia a una vista que se crea más adelante en el diseño.
Yoraco Gonzales
15

Cambie cada identificación @ida @+id, sin importar cuándo esté definiendo o haciendo referencia a una identificación. Con esto, no obtendrás

Error xml de Android: "No se encontró ningún recurso que coincida con el nombre de pila" con RelativeLayout (@ id / LinearLayout_acc, @ id / ProgressBar_statusScreen).

AkashG
fuente
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" >
Hardik Nadiyapara
fuente