¿Para qué sirve LayoutInflater
Android?
android
layout-inflater
android-inflate
usuario386430
fuente
fuente
Respuestas:
Cuando utiliza una vista personalizada en un
ListView
debe definir el diseño de la fila. Creas un xml donde colocas widgets de Android y luego en el código del adaptador tienes que hacer algo como esto:Lea más en la documentación oficial .
fuente
View view = convertView; if (view == null) { view = mInflater.... }
LayoutInflater
es un , aunque explica dónde usarlo. La respuesta 1 abajo es mejor.La clase LayoutInflater se usa para crear instancias del contenido de los archivos XML de diseño en sus correspondientes objetos de vista.
En otras palabras, toma un archivo XML como entrada y construye los objetos Ver a partir de él.
fuente
single_list_item.xml
archivo para cada línea de aListView
. ¿Es el uso de ese archivo XML como un inflador?¿Qué
LayoutInflator
hacer?Cuando comencé la programación de Android, estaba realmente confundido por
LayoutInflater
yfindViewById
. Algunas veces usamos una y otras la otra.LayoutInflater
se usa para crear un nuevoView
(oLayout
) objeto a partir de uno de sus diseños xml.findViewById
solo le da una referencia a una vista que ya se ha creado. Se podría pensar que usted no ha creado ninguna vistas aún, pero siempre que se pongasetContentView
enonCreate
, el diseño de la actividad junto con sus subvistas se infla (creada) por detrás de las escenas.Entonces, si la vista ya existe, use
findViewById
. Si no es así, créelo con aLayoutInflater
.Ejemplo
Aquí hay un mini proyecto que hice que muestra ambos
LayoutInflater
yfindViewById
en acción. Sin un código especial, el diseño se ve así.El cuadrado azul es un diseño personalizado insertado en el diseño principal con
include
(vea aquí para más información). Se infló automáticamente porque es parte de la vista de contenido. Como puede ver, el código no tiene nada de especial.Ahora inflemos (creemos) otra copia de nuestro diseño personalizado y agréguela.
Para inflar el nuevo diseño de la vista, todo lo que hice fue decirle al inflador el nombre de mi archivo xml (
my_layout
), el diseño principal al que quiero agregarlo (mainLayout
), y que en realidad no quiero agregarlo todavía (false
) . (También podría establecer el padre ennull
, pero luego se ignorarían los parámetros de diseño de la vista raíz de mi diseño personalizado).Aquí está nuevamente en contexto.
Observe cómo
findViewById
se usa solo después de que un diseño ya se ha inflado.Código Suplementario
Aquí está el xml para el ejemplo anterior.
activity_main.xml
my_layout.xml
¿Cuándo necesita LayoutInflater?
RecyclerView
. (Consulte estosRecyclerView
ejemplos para obtener una lista o una cuadrícula ). Debe inflar un nuevo diseño para cada elemento visible en la lista o cuadrícula.fuente
myLayout
es una Vista, aunque podría haberla inflado como RelativeLayout (ver my_layout.xml). Después de que se infla, lo agrego como una subvista del padre LinearLayout (es decir,mainLayout
).LayoutInflater.inflate () proporciona un medio para convertir un archivo res / layout / *. Xml que define una vista en un objeto View real que se puede usar en el código fuente de su aplicación.
dos pasos básicos: obtener el inflador y luego inflar el recurso
¿Cómo se obtiene el inflador?
¿Cómo se obtiene la vista suponiendo que el archivo xml es "list_item.xml"?
fuente
Aquí hay otro ejemplo similar al anterior, pero ampliado para demostrar aún más los parámetros de inflado y el comportamiento dinámico que puede proporcionar.
Suponga que su diseño de fila ListView puede tener un número variable de TextViews. Entonces, primero infla la vista del elemento base (al igual que en el ejemplo anterior) y luego realiza un bucle de forma dinámica agregando TextViews en tiempo de ejecución. Usando android: layout_weight adicionalmente alinea todo perfectamente.
Aquí están los recursos de diseños:
list_layout.xml
schedule_layout.xml
Anular el método getView en la extensión de la clase BaseAdapter
Observe diferentes llamadas al método de inflado:
fuente
Esta clase se usa para crear instancias del archivo XML de diseño en sus
View
objetos correspondientes . Nunca se debe usar directamente: usegetLayoutInflater()
ogetSystemService(String)
para recuperar unaLayoutInflater
instancia estándar que ya está conectada al contexto actual y configurada correctamente para el dispositivo en el que se está ejecutando. Por ejemplo:Referencia: http://developer.android.com/reference/android/view/LayoutInflater.html
fuente
Inflar significa leer el archivo XML que describe un diseño (o elemento GUI) y crear los objetos reales que le corresponden, y así hacer que el objeto sea visible dentro de una aplicación de Android.
Este archivo podría guardarse como date_time_dialog.xml :
Este archivo podría guardarse como date_time_picker.xml :
La
MainActivity
clase guardada como MainActivity.java :fuente
¿Qué hace el inflador?
Toma un diseño xml como entrada (digamos) y lo convierte en objeto Ver.
¿Por qué es necesario?
Pensemos en un escenario en el que necesitamos crear una vista de lista personalizada. Ahora cada fila debe ser personalizada. Pero, ¿cómo podemos hacerlo? No es posible asignar un diseño xml a una fila de vista de lista. Entonces, creamos un objeto Ver. Por lo tanto, podemos acceder a los elementos que contiene (vista de texto, vista de imagen, etc.) y también asignar el objeto como fila de vista de lista
Entonces, cada vez que necesitemos asignar un objeto de tipo de vista en algún lugar y tengamos nuestro diseño xml personalizado, simplemente lo convertiremos en objeto mediante inflador y lo usaremos.
fuente
LayoutInflater es una clase utilizada para instanciar archivos XML de diseño en sus objetos de vista correspondientes que se pueden usar en programas Java. En términos simples, hay dos formas de crear una interfaz de usuario en Android. Una es una forma estática y otra es dinámica o programática. Supongamos que tenemos un diseño simple main.xml que tiene uno
textview
y uno de laedittext
siguiente manera.Podemos mostrar este diseño de forma estática mediante
Una forma dinámica de crear una vista significa que la vista no se menciona en nuestro main.xml pero queremos mostrarla en tiempo de ejecución. Por ejemplo, tenemos otro XML en la carpeta de diseño como footer.xml
Queremos mostrar este cuadro de texto en tiempo de ejecución dentro de nuestra interfaz de usuario principal. Entonces aquí inflaremos text.xml. Ver cómo:
Aquí he usado getSystemService (String) para recuperar una instancia de LayoutInflater. También puedo usar getLayoutInflator () para inflar en lugar de usar getSystemService (String) como se muestra a continuación:
fuente
Aquí hay un ejemplo para obtener una referencia para la Vista raíz de un diseño, inflarlo y usarlo con setContentView (Vista de vista)
fuente
Layout Inflater es una clase que lee la descripción del aspecto xml y los convierte en objetos View basados en Java.
fuente
mi lista de personalización espero que ilustre el concepto
fuente
LayoutInflater es un componente fundamental en Android. Debe usarlo todo el tiempo para convertir los archivos xml en jerarquías de vista.
fuente
LayoutInflater crea objetos de vista basados en diseños definidos en XML. Hay varias formas diferentes de usar LayoutInflater, incluida la creación de vistas personalizadas, inflar vistas de fragmentos en vistas de actividad, crear cuadros de diálogo o simplemente inflar una vista de archivo de diseño en una actividad.
Hay muchos conceptos erróneos sobre cómo funciona el proceso de inflación. Creo que esto proviene de la falta de documentación para el método inflate (). Si desea obtener información detallada sobre el método inflate (), escribí una publicación de blog al respecto aquí:
https://www.bignerdranch.com/blog/understanding-androids-layoutinflater-inflate/
fuente
Inflater en realidad algún tipo de conversión a datos, vistas, instancias, a la representación de la interfaz de usuario visible .. ..que utiliza el suministro de datos desde quizás adaptadores, etc. mediante programación. luego integrándolo con un xml que definió, que le dice cómo se deben representar los datos en la interfaz de usuario
fuente