android inflate - Cómo inflar una vista con un diseño





layout layout_inflater_service (13)


Aún más simple es usar

View child = View.inflate(context, R.layout.child, null)
item.addChild(child) //attach to your item

Tengo un diseño definido en XML. Contiene también:

<RelativeLayout
    android:id="@+id/item"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
/>

Me gustaría inflar este RelativeView con otro archivo de diseño XML. Puedo usar diferentes diseños dependiendo de la situación. ¿Cómo debería hacerlo? Estaba probando diferentes variaciones de

RelativeLayout item = (RelativeLayout) findViewById(R.id.item);
item.inflate(...)

Pero ninguno de ellos funcionó bien.




Es útil agregar a esto, a pesar de que es una publicación antigua, que si la vista secundaria que se está inflando desde xml se agrega a un diseño de grupo de vista, debe llamar a inflar con una pista de qué tipo de grupo de vista se va para ser añadido a. Me gusta:

View child = getLayoutInflater().inflate(R.layout.child, item, false);

El método de inflado está bastante sobrecargado y describe esta parte del uso en los documentos. Tuve un problema en el que una única vista inflada desde xml no se alineaba correctamente en el padre hasta que hice este tipo de cambio.




Si no está en una actividad, puede usar el método static from() de la clase LayoutInflater para obtener un LayoutInflater , o solicitar el servicio del método de contexto getSystemService() también:

LayoutInflater i;
Context x;       //Assuming here that x is a valid context, not null

i = (LayoutInflater) x.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
//OR
i = LayoutInflater.from(x);

(Sé que es hace casi 4 años, pero aún vale la pena mencionar)







No estoy seguro de haber seguido su pregunta: ¿está intentando adjuntar una vista secundaria al RelativeLayout? Si es así quieres hacer algo como:

RelativeLayout item = (RelativeLayout)findViewById(R.id.item);
View child = getLayoutInflater().inflate(R.layout.child, null);
item.addView(child);



Infla un recurso XML. Ver el documento de LayoutInflater .

Si tu diseño está en un mylayout.xml , harías algo como:

View view; 
LayoutInflater inflater = (LayoutInflater)   getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
view = inflater.inflate(R.layout.mylayout, null);

RelativeLayout item = (RelativeLayout) view.findViewById(R.id.item);



Con Kotlin, puedes usar:

val content = LayoutInflater.from(context).inflate(R.layout.[custom_layout_name], null)

[your_main_layout].apply {
    //..
    addView(content)
}



Aunque es una respuesta tardía, pero me gustaría agregar esa forma de obtener esto.

LayoutInflater layoutInflater = (LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View view = layoutInflater.inflate(R.layout.mylayout, item );

donde item es el diseño principal donde desea agregar un diseño secundario.




Si desea agregar una sola vista varias veces, entonces tiene que usar

   layoutInflaterForButton = getActivity().getLayoutInflater();

 for (int noOfButton = 0; noOfButton < 5; noOfButton++) {
        FrameLayout btnView = (FrameLayout) layoutInflaterForButton.inflate(R.layout.poll_button, null);
        btnContainer.addView(btnView);
    }

Si te gusta

   layoutInflaterForButton = getActivity().getLayoutInflater();
    FrameLayout btnView = (FrameLayout) layoutInflaterForButton.inflate(R.layout.poll_button, null);

y

for (int noOfButton = 0; noOfButton < 5; noOfButton++) {
            btnContainer.addView(btnView);
        }

entonces lanzará la excepción de todas las vistas agregadas listas.




inflación de diseño

View view = null;
LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
view = inflater.inflate(R.layout.mylayout, null);
main.addView(view);



¿Si está tratando de adjuntar una vista secundaria a RelativeLayout? puedes hacerlo siguiendo

RelativeLayout item = (RelativeLayout)findViewById(R.id.item);
View child = getLayoutInflater().inflate(R.layout.child, item, true);



Usé el siguiente fragmento de código para esto y funcionó para mí.

LinearLayout linearLayout = (LinearLayout)findViewById(R.id.item);
View child = getLayoutInflater().inflate(R.layout.child, null);
linearLayout.addView(child);



Resolví este problema usando un nuevo Thread .

Thread thread = new Thread(new Runnable() {

    @Override
    public void run() {
        try  {
            //Your code goes here
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
});

thread.start(); 




android android-layout layout-inflater android-inflate