¿Cuál es la diferencia entre el
@id/
y@+id/
?
En @+id/
el símbolo más le +
indica que cree un nuevo nombre de recurso y lo agregue al R.java
archivo, pero ¿qué pasa @id/
? De la documentación de ID
: cuando se hace referencia a un recurso de Android ID
, no necesita el símbolo más, pero debe agregar el espacio de nombres del paquete de Android, de esta manera:
android:id="@android:id/list"
Pero en la imagen a continuación, Eclipse no sugiere ningún tipo de @android:id/
.
¿Son
@id/
y@android:id/
lo mismo?
android
android-xml
Vikas Patidar
fuente
fuente
Respuestas:
te refieres
Android resources
, que ya están definidos en el sistema Android,@android:id/..
mientras que para acceder a los recursos que has definido / creado en tu proyecto, usas@id/..
Más información
Según sus aclaraciones en el chat, dijo que tiene un problema como este:
Bueno, depende del contexto, cuando está utilizando el atributo XML de
android:id
, entonces está especificando una nueva identificación, y le está ordenando al analizador (o llamarlo el constructor) que cree una nueva entradaR.java
, por lo que debe Incluir un+
señal.Mientras que en el otro caso, como
android:layout_below="@id/myTextView"
, te estás refiriendo a una identificación que ya se ha creado, por lo que el analizador vincula esto con la identificación ya creadaR.java
.Más información nuevamente
Como dijiste en tu chat, ten en cuenta que
android:layout_below="@id/myTextView"
no reconocerá un elemento con idmyTextView
si está escrito después del elemento en el que lo estás usando.fuente
android:layout_below="@+id/myTextView"
y ENTONCES definir el elemento mismo conandroid:id="@id/myTextView"
.+
entradalayout_below
tambiénandroid:id
está muy bien, yaThe '+' means to create the symbol if it doesn't already exist
que Tanmay Mandal lo mencionó en su buena (pero subestimada) respuesta. Debido a eso, tampoco hay un efecto negativo en el tiempo de ejecución (aunque posiblemente sea un aumento inconmensurablemente pequeño en el tiempo de compilación ^^).el signo + es un atajo para agregar la identificación a su lista de identificadores de recursos. De lo contrario, debe tenerlos en un archivo xml como este
fuente
<View android:id="@id/my_logo"/>
Si no tuvieras el archivo de recursos que definí anteriormente, deberías hacerlo como<View android:id="@+id/my_logo"/>
nota: solo necesitas hacer el + id una vez así que si en otro archivo de diseño hiciste <Ver android: id = "+ id / my_logo" /> no necesitarías incluir el carácter '+' la próxima vez que uses el mismo id en un diseño.res/drawable/
ores/layout/
ores/values/
y cuál será el nombre de ese archivo? Si tiene algún enlace útil sobre esto, publique aquí.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 identificación llamada foo en el espacio de nombres de su aplicación. Puedes referirte a él usando@id/foo
.@android:id/foo
significa que se refiere a una identificación definida 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 hace referencia a Android: símbolos, porque la plataforma ya los ha definido para usted y de todos modos no puede hacer los suyos en ese espacio de nombres.
Este espacio de nombres es el espacio de nombres del marco. por ejemplo, necesitas usar
@android:id/list
porque esta es la identificación que el marco espera encontrar ... (el marco solo conoce los identificadores en el espacio de nombres de Android).Completamente copiado de esta fuente
fuente
En breve
mientras
fuente
De: https://developer.android.com/training/basics/firstapp/building-ui.html
fuente
Es muy simple:
"@ + ..." - crear nuevo
"@ ..." - enlace en existente
Fuente: https://developer.android.com/guide/topics/resources/layout-resource.html#idvalue
fuente
De la Guía del desarrollador :
El símbolo at (
@
) al comienzo de la cadena indica que el analizador XML debe analizar y expandir el resto de la cadena de identificación e identificarlo como un recurso de identificación. El símbolo más (+
) significa que este es un nuevo nombre de recurso que debe crearse y agregarse a nuestros recursos (en elR.java
archivo). Hay una serie de otros recursos de identificación que ofrece el marco de Android. Al hacer referencia a un ID de recurso de Android, no necesita el símbolo más, pero debe agregar elandroid
espacio de nombres del paquete, de esta manera:android:id="@android:id/empty"
fuente
Hay un error con Eclipse en el que, 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.Creo que esto debería resolverse lo antes posible, porque puede (y por experiencia) confundirá a algunos desarrolladores al pensar que hay algo mal con su sintaxis, e intentará depurarlo incluso si realmente no hay nada que depurar.
fuente
Android usa algunos archivos llamados recursos donde los valores se almacenan para los archivos XML.
Ahora, cuando usa @ id / para un objeto XML, intenta hacer referencia a una identificación que ya está registrada en los archivos de valores. Por otro lado, cuando usa @ + id / registra una nueva identificación en los archivos de valores según lo implica el símbolo '+'.
Espero que esto ayude :).
fuente
@id/
y@android:id/
no es lo mismo@id/
referenciando ID en su aplicación,@android:id/
haciendo referencia a un elemento en la plataforma Android.Eclipse está mal.
fuente
@id/ referencing ID in your application
Estás diciendo que Pero eclise daError: No resource found that matches the given name (at 'id' with value '@id/my_resource_id')
cuando lo usamos para referir el recurso de la aplicación. Entonces, ¿cuál es la diferencia entre el@id/
y@+id/
? ¿Cómo puedes decir que el eclipse está mal?@id/
solo en el caso deRelativeLayout
La diferencia entre
@+id
y@id
es:@+id
se usa para crear una identificación para una vista en elR.java
archivo.@id
se usa para referir la identificación creada para la vista en el archivo R.java.Usamos
@+id
conandroid:id=""
, pero qué pasa si la identificación no se crea y la estamos refiriendo antes de crearla (Referencia directa).En ese caso, tenemos
@+id
que crear id y mientras definimos la vista tenemos que referirlo.Por favor, consulte el siguiente código:
En el código anterior, id para Spinner
@+id/spinner
se crea en otra vista y, al definir la ruleta, nos referimos a la identificación creada anteriormente.Entonces, tenemos que crear la identificación si estamos usando la vista antes de que la vista haya sido creada.
fuente
Diferencia entre
“@+id/”
y“@id/”
en AndroidEl primero se usa para crear el
ID
componente ui particular y el otro se usa para referir el componente particularfuente
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
elR.java
archivo solo crea una enumeración. Entonces, por ejemplo, si tengo un botón de guardar en cada página que realiza la misma operación, lo usoandroid:id="@+id/button_save"
en cada diseño. El archivo R.java solo tiene una entrada para button_save.fuente