layout_width - layout dinamico android
Diferencia entre “@ id/” y “@+id/” en Android (13)
¿Cuál es la diferencia entre
@id/
y@+id/
?
En @+id/
el símbolo más +
instrucciones para crear un nuevo nombre de recurso y agregarlo al archivo R.java
, pero ¿qué pasa con @id/
? De la documentación de ID
: cuando se hace referencia a un ID
recurso de Android, no necesita el símbolo más, pero 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/
.
Son
@id/
y@android:id/
iguales?
El signo más (
+
) antes del tipo de recurso solo es necesario cuando está definiendo un ID de recurso por primera vez. Cuando compila la aplicación, las herramientas del SDK usan el nombre de ID para crear un nuevo ID de recurso en el archivoR.java
su proyecto que hace referencia al elementoEditText
. Con el ID de recurso declarado de esta manera, otras referencias al ID no necesitan el signo más. El uso del signo más es necesario solo cuando se especifica un nuevo ID de recurso y no es necesario para recursos concretos como cadenas o diseños. Consulte el sidebox para obtener más información sobre los objetos de recursos.
Desde: https://developer.android.com/training/basics/firstapp/building-ui.html
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á creando una ID llamada foo en el espacio de nombres de su aplicación. Puedes referirte usando @id/foo
. @android:id/foo
significa que te refieres a un id definido en el espacio de nombres de Android.
El ''+'' significa crear el símbolo si aún no existe. No lo necesita (y no debe usarlo) cuando haga referencia a los símbolos android: porque esos ya están definidos para usted por la plataforma y de todos modos no puede hacer su propio nombre en ese espacio de nombres.
Este espacio de nombres es el espacio de nombres del marco. por ejemplo, necesita usar @android:id/list
porque este es el id que el marco espera encontrar ... (el framework solo conoce los id en el espacio de nombres de Android).
Copiado completamente de esta source
Android usa algunos archivos llamados recursos donde los valores se almacenan para los archivos XML.
Ahora cuando usa @ id / para un objeto XML, está tratando de referirse a un id que ya está registrado en los archivos de valores. Por otro lado, cuando usa @ + id / registra una nueva id en los archivos de valores como lo indica el símbolo ''+''.
Espero que esto ayude :).
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 símbolo más ( +
) significa que este es un nuevo nombre de recurso que se debe crear y agregar a nuestros recursos (en el archivo R.java
). Hay una serie de otros recursos de identificación que se ofrecen en el marco de Android. Al hacer referencia a un ID de recurso de Android, no necesita el símbolo más, pero debe agregar el espacio de nombres del paquete de android
, de esta forma:
android:id="@android:id/empty"
Diferencia entre “@+id/”
y “@id/”
en Android
El primero se usa para crear el ID
del componente ui en particular y el otro para referirse al componente particular
El signo + es un atajo para agregar el ID a su lista de ID de recursos. De lo contrario, necesitas tenerlos en un archivo xml como este
<?xml version="1.0" encoding="utf-8"?>
<resources>
<item name="my_logo" type="id"/>
</resources>
Hay un error con Eclipse en el que, a veces, si acaba de crear un nuevo @+id/..
, no se agregará de inmediato al archivo R.java, incluso después de realizar una limpieza del proyecto. La solución es reiniciar Eclipse.
Creo que esto debería resolverse lo antes posible, ya que puede (y por experiencia,) confundir a algunos desarrolladores para que piensen que hay algo mal con su sintaxis, e intentar depurarlo incluso si realmente no hay nada que depurar.
La diferencia entre @+id
y @id
es:
-
@+id
se usa para crear una identificación para una vista en el archivoR.java
. -
@id
se usa para referir el id creado para la vista en el archivo R.java.
Usamos @+id
con android:id=""
, pero ¿qué pasa si no se crea el id y lo estamos refiriendo antes de ser creado (Referencias Adelante)?
En ese caso, usamos @+id
para crear la identificación y, mientras definimos la vista, debemos referirla.
Por favor, consulte el siguiente código:
<RelativeLayout>
<TextView
android:id="@+id/dates"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_toLeftOf="@+id/spinner" />
<Spinner
android:id="@id/spinner"
android:layout_width="96dp"
android:layout_height="wrap_content"
android:layout_below="@id/name"
android:layout_alignParentRight="true" />
</RelativeLayout>
En el código anterior, la identificación para Spinner @+id/spinner
se crea en otra vista y al definir la rueda giratoria nos referimos a la identificación creada anteriormente.
Por lo tanto, tenemos que crear el ID si estamos utilizando la vista antes de que se haya creado la vista.
Si el elemento de vista realiza la misma operación, puede usar la identificación @ + para cada entrada en cualquier diseño, ya que durante la compilación de varias identificaciones @ + / foo, el archivo R.java solo crea una enumeración. Por ejemplo, si tengo un botón para guardar en cada página que realiza la misma operación, uso android: id = "@ + id / button_save" en cada diseño. El archivo R.java solo tiene una entrada para button_save.
hace referencia a los Android resources
, que ya están definidos en el sistema Android, con @android:id/..
mientras que para acceder a los recursos que ha definido / creado en su proyecto, usa @id/..
Más información
Según sus aclaraciones en el chat, usted dijo que tiene un problema como este:
Si usamos
android:id="@id/layout_item_id"
no funciona. En cambio,@+id/
funciona, ¿cuál es la diferencia aquí? Y esa fue mi pregunta original.
Bueno, depende del contexto, cuando estás usando el atributo XML de android:id
, estás especificando una nueva identificación y le estás dando instrucciones al analizador (o llamémoslo el constructor) para crear una nueva entrada en R.java
, por lo tanto tienes que incluir un signo +
.
Mientras que en el otro caso, como android:layout_below="@id/myTextView"
, te refieres a un id que ya se ha creado, por lo que el analizador lo vincula 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 lo estás utilizando.
@id/
y @android:id/
no es lo mismo.
@id/
ID de referencia en su aplicación, @android:id/
referencia a un elemento en la plataforma Android.
Eclipse está mal.
En breve
android:id="@+id/my_button"
El signo + id Plus le dice a Android que agregue o cree una nueva ID en Recursos.
mientras
android:layout_below="@id/my_button"
solo ayuda a referir el id ya generado ..
Es muy sencillo:
"@ + ..." - crear nuevo
"@ ..." - enlace en existente
Fuente: https://developer.android.com/guide/topics/resources/layout-resource.html#idvalue