Diferencia entre "@ id /" y "@ + id /" en Android

¿Cuál es la diffirence entre el @id/ y @+id/ ?

En @+id/ el símbolo + le indica que cree un nuevo nombre de recurso y agregue al archivo R.java pero ¿qué pasa con @id/ ? De la documentación de ID : al hacer referencia a un ID de recurso de Android, no necesita el símbolo de más, sino que debe agregar el espacio de nombres del paquete de Android, así:

 android:id="@android:id/list" 

Pero en la imagen de abajo Eclipse no sugiere ningún tipo de @android:id/ .

Imagen que muestra la sugerencia para el @ / id y @ + / id

¿Son @id/ y @android:id/ lo mismo?

Te refieres a los Android resources , que ya están definidos en el sistema Android, con @android:id/.. mientras accedes a los recursos que hayas definido / creado en tu proyecto, utilizas @id/..

Más información

Según tus aclaraciones en el chat, has dicho que tienes un problema como este:

Si usamos android:id="@id/layout_item_id" no funciona. En su lugar, @+id/ works, ¿cuál es la diferencia aquí? Y esa era mi pregunta original.

Bueno, depende del contexto, cuando estás usando el atributo XML de android:id , entonces estás especificando un nuevo id, y estás instruyendo al analizador (o llamarlo el constructor) para crear una nueva entrada en R.java , por lo que tiene que incluir un signo + .

Mientras que en el otro caso, como android:layout_below="@id/myTextView" , se está refiriendo a un id que ya ha sido creado, por lo que el analizador vincula esto con el ID ya creado en R.java .

Más información de nuevo

Como dijiste en tu chat, ten en cuenta que android:layout_below="@id/myTextView" no reconocerá un elemento con id myTextView si está escrito después del elemento en el que estás usando.

El signo + es un atajo para agregar el ID a su lista de identificadores de recursos. De lo contrario, tendrá que tenerlos en un archivo xml como este

 <?xml version="1.0" encoding="utf-8"?> <resources> <item name="my_logo" type="id"/> </resources> 

A veces ves referencias en tus archivos de diseño como:

<listview id="@+id/android:list">

y

<listview id="@android:id/list">

¿Cual es la diferencia?

Me alegra que hayas preguntado

@+id/foo significa que estás creando un id llamado foo en el espacio de nombres de tu aplicación. Puede consultarlo utilizando @id/foo . @android:id/foo significa que se está refiriendo a un id definido en el espacio de nombres android.

El '+' significa crear el símbolo si aún no existe. No lo necesitas (y no deberías usarlo) cuando haces referencia a android: símbolos, ya que ya están definidos para ti por la plataforma y no puedes hacer tu propio espacio de nombres de todos modos.

Este espacio de nombres es el espacio de nombres del marco. Por ejemplo, necesitas usar @android:id/list porque este es el id que el framework espera encontrar .. (el framework solo conoce los ids en el espacio de nombres android).

Completamente copiado de esta fuente

En breve

 android:id="@+id/my_button" 

+ Signo id Plus le dice a android que agregue o cree un nuevo id en Resources.

mientras

 android:layout_below="@id/my_button" 

Sólo ayuda a referir el ID ya generado ..

El signo más ( + ) antes del tipo de recurso sólo se necesita cuando se está definiendo un ID de recurso por primera vez. Cuando compila la aplicación, las herramientas de SDK utilizan el nombre de ID para crear un nuevo ID de recurso en el archivo R.java su proyecto que hace referencia al elemento EditText . Con el identificador de recurso declarado una vez de esta manera, otras referencias a la ID no necesitan el signo más. El uso del signo más solo es necesario cuando se especifica un nuevo ID de recurso y no se necesita para recursos concretos como cadenas o diseños. Consulte la caja lateral para obtener más información sobre los objetos de recursos.

De: https://developer.android.com/training/basics/firstapp/building-ui.html

Hay un error con Eclipse, donde a veces, si acaba de crear un nuevo @+id/.. , no se agregará inmediatamente al archivo R.java, incluso después de limpiar el proyecto. La solución es reiniciar Eclipse.

Esto creo que debería ser resuelto tan pronto como sea posible, porque puede (y de la experiencia, va a) confundir a algunos desarrolladores en el pensamiento de que hay algo mal con su sintaxis, y tratar de depurar incluso si realmente no hay nada que depurar.

@ Id / and @android: id / no es lo mismo.

@ Id / ID de referencia en su aplicación, @android: id / referenciando un elemento en la plataforma Android.

Eclipse está equivocado.

En la Guía para desarrolladores :

 android:id="@+id/my_button" 

El símbolo at ( @ ) al principio de la cadena indica que el analizador XML debe analizar y expandir el resto de la cadena de ID e identificarlo como un recurso de ID. El signo más ( + ) significa que se trata de un nuevo nombre de recurso que debe crearse y agregarse a nuestros recursos (en el archivo R.java ). Hay una serie de otros recursos de ID que se ofrecen en el marco de Android. Al hacer referencia a un ID de recurso de Android, no necesita el símbolo de más, pero debe agregar el espacio de nombres del paquete de android , así:

android:id="@android:id/empty"

Android utiliza algunos archivos llamados recursos donde se almacenan valores para los archivos XML.

Ahora, cuando usas @ id / para un objeto XML, está tratando de hacer referencia a un id que ya está registrado en los archivos de valores. Por otro lado, cuando usas @ + id / registra un nuevo id en los archivos de valores tal como lo implica el símbolo '+'.

Espero que esto ayude :).

Si el elemento de vista realiza la misma operación, puede usar el @ + id para cada entrada en cualquier diseño porque durante la compilación de múltiples @ + id / foo el archivo R.java sólo crea una enumeración. Por ejemplo, si tengo un botón de guardar en cada página que realiza la misma operación, utilizo android: id = "@ + id / button_save" en cada diseño. El archivo R.java sólo tiene una entrada para la función button_save.

Diferencia entre "@ id /" y "@ + id /" en Android

El primero se utiliza para crear el id del componente ui particular y el otro se utiliza para referir el componente particular

  • XML predeterminado para la notificación de estado
  • cómo encontrar mis errores en el archivo xml
  • Excepción grave: java.lang.SecurityException: Falta permiso para insertar credenciales
  • Atributo desconocido androide: elevación
  • Error en este XML: Error al analizar XML: prefijo no enlazado
  • Alinear la vista de texto según la selección de idioma (LEFT -RIGHT)
  • Cómo dibujar un rectángulo con esquinas redondeadas con XML?
  • ¿Por qué "androide: shadowColor" property not support "selector"?
  • ¿Cómo hacer referencia a un estilo definido en un módulo de Android con IntelliJ?
  • Estilo de fila ListView: texto alineado a la izquierda e icono alineado a la derecha
  • ¿Cómo puedo utilizar varios valores para las propiedades de diseño XML de Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.