2011-10-01 27 views
34

Solo una pregunta rápida, ¿para qué sirve el ids.xml para desarrollar una aplicación de Android? vi un ejemplo en la página web de recursos androide que contenía:¿para qué se utiliza ids.xml?

<resources> 
    <item name="snack" type="id"/> 
</resources> 

¿Cómo sería esto se utiliza?

Respuesta

17

id.xml se usa generalmente para declarar los identificadores que utiliza para las vistas en los diseños.

usted podría utilizar algo como

<TextView android:id="@id/snack"> 

para su XML en cuestión.

+11

Cualquier ventaja al definirlo en "ids.xml" en lugar de simplemente hacer ... android: id = "@ + id/snack"? – pyko

+5

Entonces, ¿debería usar android: id = "@ + id/newID" o declarar newID en el archivo ids.xml? ¿Cuál es la mejor solución? –

+3

también puede usarlo para las etiquetas 'view.setTag (id, value)' para leer esa etiqueta de su vista más tarde ... – SparK

22

ids.xml tiene la siguiente ventaja: todos los identificadores se declararon, por lo que el compilador puede reconocerlos. Si algo como esto:

<TextView 
    android:id="@+id/text1" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignBelow="@id/text2" 
    android:text="...."/> 
<TextView 
    android:id="@+id/text2" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="...."/> 

puede dar lugar a error de compilación porque texto2 se refirió antes declarado

+0

Tienes razón, estoy teniendo este problema exacto. Sé que es una publicación anterior.En mi situación, tengo que colocar el botón Guardar en la parte superior del archivo XML, pero aparecerá en el botón de la pantalla Quiero que otra vista diga ARRIBA GuardarBotón. Traté de dejar que el botón de guardar decía debajo de esa vista pero eso no funcionó para mí. – malhobayyeb

+1

Aunque es cierto, realmente no ayuda mucho. En este ejemplo, podría haber puesto 'android: layout_alignBelow =" @ + id/text2 "' y en el segundo 'TextView',' android: id = "@ id/text2" '. – ataulm

+1

Esa es una solución válida, pero declarar una identificación dentro de una vista distinta a la especificada podría no ser la mejor opción de estilo. Para que el idioma refleje correctamente su intención, la identificación debe declararse dentro de la vista que la usa. –

8

Otra aplicación para id.xml es con respecto a los diseños y proyectos de la biblioteca. Digamos que especifica una lista genérica de opciones en una biblioteca (de diálogo) diseño

<CheckedTextView android:id="@+id/checked_option_one"... 
<CheckedTextView android:id="@+id/checked_option_two"... 
... 

y manejar estos puntos de vista en un (diálogo) fragmento genérico

optionOneCheck = (CheckedTextView)rootView.findViewById(R.id.checked_option_one); 
optionTwoCheck = (CheckedTextView)rootView.findViewById(R.id.checked_option_two); 

Si elimina cualquiera de las vistas declaraciones de una copia del diseño en un proyecto principal, obtendrá una excepción de error "no such such" en el tiempo de ejecución.

El compilador no se queja, pero en el tiempo de ejecución, la identificación no está realmente allí.

declarar las ids en id.xml y usando

<CheckedTextView android:id="@id/checked_option_one"... 
... 

evita el error de ejecución

+1

"El compilador no se queja" - ¿estás seguro? Por lo menos, Lint se queja si se usa una ID que no existe en el proyecto. De todos modos, evitar el error de tiempo de ejecución (por el método que ha descrito) sería enmascarar el síntoma, pero no el problema; está intentando obtener una Vista basada en una ID que no está asociada a una Vista. – ataulm

+0

Mi respuesta se refiere a una situación en la que una aplicación base se encuentra en un proyecto de biblioteca y las versiones de marca usan diseños modificados con algunas de las vistas en el diseño omitidas por una definición de diseño anulado en la aplicación de marca (principal). Como la definición de disposición completa todavía está en el proyecto de la biblioteca, el compilador encuentra la identificación, pero en el tiempo de ejecución no está allí. – mir

+0

AH ok, te tengo, gracias por la actualización. – ataulm

7

Al crear vistas dinámicamente, predefinir de id en ids.xml da la posibilidad para hacer referencia a una vista recién creada . Después de usar el método setId(id), puede acceder a la vista como si se hubiera definido en XML. Este blog post tiene un buen ejemplo.

Cuestiones relacionadas