¿Qué significa inflar una vista desde un archivo xml?

278

Soy nuevo en el desarrollo de Android y sigo encontrando referencias a Inflar vistas desde un archivo xml de diseño. Busqué en Google y busqué en la guía de desarrollo, pero aún así no pude entender lo que significa. Si alguien pudiera proporcionar un ejemplo muy simple, sería muy apreciado.

Brendan Weinstein
fuente

Respuestas:

257

Cuando se escribe un diseño de XML, se infla por el sistema operativo Android, que básicamente significa que se representará mediante la creación de vista de objetos en memoria. Llamemos a eso inflación implícita (el sistema operativo inflará la vista por usted). Por ejemplo:

class Name extends Activity{
    public void onCreate(){
         // the OS will inflate the your_layout.xml
         // file and use it for this activity
         setContentView(R.layout.your_layout);
    }
}

También puede inflar vistas explícitamente utilizando LayoutInflater. En ese caso tienes que:

  1. Obtenga una instancia de LayoutInflater
  2. Especifique el XML para inflar
  3. Usa el devuelto View
  4. Establecer la vista de contenido con la vista devuelta (arriba)

Por ejemplo:

LayoutInflater inflater = LayoutInflater.from(YourActivity.this); // 1
View theInflatedView = inflater.inflate(R.layout.your_layout, null); // 2 and 3
setContentView(theInflatedView) // 4
Cristian
fuente
24
if inflate = rendering, entonces, ¿para qué sirve onDraw (), precisamente?
PypeBros
@sylvainulg, R.id.view se usa para cambiar los atributos del elemento xml e inflar puede hacer lo mismo. inflar es particularmente útil en vistas personalizadas. Para inflar todo el archivo xml, se utiliza la clase familiar setContentView of Activity. Una vista debe inflar cada vista manualmente usando LayoutInflater object.inflate (). Una actividad tiene un ciclo de vida. Una vista tiene un ciclo de dibujo en su lugar. Inflador es particularmente útil con una vista personalizada en lugar de utilizar el diseño predifiend en un archivo XML.
Sree Rama
@Cristian Por favor, ¿crees que podrías darme algunos consejos / ideas por aquí goo.gl/E37NSu
eddy
24
No creo que inflar sea renderizar, sino inflar es la creación real del objeto View en la memoria en función del contenido del archivo xml. Después del inflado, la Vista estará en la memoria no necesariamente visible.
Ahmed
1
@MattJ. Bueno, mi respuesta podría estar mal redactada. Android inflará la vista no solo al tener el XML en alguna parte, sino cuando llame a setContentView o inflará manualmente el diseño. Cuando llama a findViewByIdla vista, los objetos ya están en la memoria, y la única razón por la que lo hace es para obtener una referencia a ese objeto en particular (ya sea para cambiarlo o extraer datos de él).
Cristian
160

"Inflar" una vista significa tomar el diseño XML y analizarlo para crear la vista y los objetos del grupo de vista a partir de los elementos y sus atributos especificados dentro, y luego agregar la jerarquía de esas vistas y grupos de vista al ViewGroup primario. Cuando llama a setContentView (), adjunta las vistas que crea al leer el XML a la actividad. También puede usar LayoutInflater para agregar vistas a otro ViewGroup, que puede ser una herramienta útil en muchas circunstancias.

jjb
fuente
22
eso me parece una descripción mucho más precisa.
PypeBros
44
Todavía estoy un poco confundido por la terminología de "inflación". (Si tan solo pudiera dejar de imaginar que el aire entra en algo). Pero tal vez esto ayude: acabo de ejecutar el programa de descompresión en un terminal de Ubuntu y noté la terminología: "inflar: X / Y / z.xml". Supongo que es realmente el mismo concepto.
Ben Ogorek
66
"Inflar" en este caso significa que el marco toma la descripción del diseño del XML y llena la jerarquía de la vista con objetos de Vista reales. Entonces, se está inflando en el sentido de completar el diseño.
jjb
1
@FranciscoCorrales - Claro. Lo más común para lo que usaría este tipo de cosas es para algo como un ListAdapter , donde desea llenar una fila. Lo he usado para llenar cosas como LinearLayouts, iterando sobre algún objeto de datos de una manera que no sugirió el enfoque ListAdapter.
jjb
36

Inflar es el proceso de agregar una vista (.xml) a la actividad en tiempo de ejecución. Cuando creamos un listView, inflamos cada uno de sus elementos dinámicamente. Si queremos crear un ViewGroup con múltiples vistas como botones y vista de texto, podemos crearlo así:

Button but = new Button();
but.setText ="button text";
but.background ...
but.leftDrawable.. and so on...

TextView txt = new TextView();
txt.setText ="button text";
txt.background ... and so on...

Luego tenemos que crear un diseño donde podamos agregar vistas anteriores:

RelativeLayout rel = new RelativeLayout();

rel.addView(but);

Y ahora, si queremos agregar un botón en la esquina derecha y una vista de texto en la parte inferior, tenemos que hacer mucho trabajo. Primero instanciando las propiedades de vista y luego aplicando múltiples restricciones. Esto lleva mucho tiempo.

Android nos facilita crear un .xml simple y diseñar su estilo y atributos en xml y luego simplemente inflarlo donde sea que lo necesitemos sin la molestia de establecer restricciones programáticamente.

LayoutInflater inflater = 
              (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View menuLayout = inflater.inflate(R.layout.your_menu_layout, mainLayout, true);
//now add menuLayout to wherever you want to add like

(RelativeLayout)findViewById(R.id.relative).addView(menuLayout);
Zar E Ahmer
fuente
Me gusta cómo describiste qué es realmente la inflación, al mostrar cómo lo harías manualmente.
Daniel
1
¿Qué significa el parámetro attachToRoot de inflar?
flz
Ver respuesta detallada stackoverflow.com/questions/12567578/…
Zar E Ahmer
5

Creo que "inflar una vista" significa buscar el archivo layout.xml dibujando una vista especificada en ese archivo xml y POBLAR (= inflar) el grupo de vista padre con la Vista creada.

Jaydeep Ranipa
fuente
4

Una definición simple para la inflación podría ser convertir el código XML a código Java. Solo una forma de entender, por ejemplo, si tenemos una etiqueta en XML, el sistema operativo tiene que crear un objeto Java correspondiente en la memoria, por lo que inflatter lee las etiquetas XML y crea los objetos correspondientes en Java.

usuario3458211
fuente
2

Debido a que hacemos la interfaz de usuario en XML, pero ver objetos es lo que mostramos, por lo que de alguna manera necesitamos convertir xml en objetos de vista, por lo que inflar significa que estamos convirtiendo xml en objetos de vista para que se puedan mostrar, para esto necesitamos un servicio llamado servicio de inflador de diseño y dale un xml y se convertirá por ti.

blackHawk
fuente