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í:
- Cómo dibujar un fondo personalizado
- Mala disposición XML con Eclipse-ADT
- Diseño XML de Android para todos los dispositivos (pequeño / normal / grande / XLarge, etc.)
- Instanciar una clase interna (Preferencia) en un archivo xml
- Cómo agregar un RelativeLayout como elemento de menú - Android
android:id="@android:id/list"
Pero en la imagen de abajo Eclipse no sugiere ningún tipo de @android:id/
.
¿Son
@id/
y@android:id/
lo mismo?
- Android: el texto de la barra de herramientas aparece como negro en vez de blanco
- Android: rotar recorta las esquinas de la forma
- Android CalendarView desaceleración de diseño
- La vista de la tarjeta Android tiene una línea gris delgada entre las tarjetas
- Cree los botones de android mediante programación utilizando la disposición XML como plantilla
- Cómo ignorar errores XML al analizar XML defectuoso con Sax (en Android)
- ¿Qué hay de malo en la cadena hardcoded en el archivo xml android?
- No se encontró la clase de barra de herramientas Android
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 archivoR.java
su proyecto que hace referencia al elementoEditText
. 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