Cómo inflar una vista con un diseño

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

 

Me gustaría inflar este RelativeView con otro archivo de diseño XML. Puedo usar diferentes diseños dependiendo de una 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.

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

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

Inflas un recurso XML. Ver el documento LayoutInflater .

Si su diseño está en mylayout.xml , haría 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); 

Aunque tardó en responder, 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.

Es útil agregar a esto, aunque es una publicación anterior, que si la vista secundaria que se está inflando desde xml se va a agregar a un diseño de grupo de vista, debe llamar a inflate con una pista de qué tipo de grupo de vista está pasando. ser agregado a. Me gusta:

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

El método inflar está bastante sobrecargado y describe esta parte del uso en los documentos. Tuve un problema en el que una sola vista inflada de xml no se alineaba correctamente en el elemento principal hasta que realicé este tipo de cambio.

Aún más simple es usar

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

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 no está en una actividad, puede usar el método static from() de la clase LayoutInflater para obtener un LayoutInflater , o solicitar el servicio desde el 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 fue hace casi 4 años pero aún vale la pena mencionarlo)

Verifique este enlace. Tiene la respuesta-> https://possiblemobile.com/2013/05/layout-inflation-as-intended/

Si desea agregar una sola vista varias veces, entonces debe 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á excepción de toda la vista añadida lista.

Tuve el momento más difícil con este error, debido a mis circunstancias únicas, pero finalmente encontré una solución.

Mi situación: estoy usando una vista separada (XML) que contiene un WebView , luego se abre en un AlertDialog cuando hago clic en un botón en mi vista de actividad principal. Pero de alguna manera u otra, el WebView pertenecía a la vista de actividad principal (probablemente porque extraje el recurso de aquí), así que justo antes de asignarlo a mi AlertDialog (como una vista), tuve que obtener el padre de mi WebView , póngalo en un ViewGroup , luego elimine todas las vistas en ese ViewGroup . Esto funcionó, y mi error desapareció.

 // set up Alert Dialog box AlertDialog.Builder alert = new AlertDialog.Builder(this); // inflate other xml where WebView is LayoutInflater layoutInflater = (LayoutInflater)this.getSystemService (Context.LAYOUT_INFLATER_SERVICE); View v = layoutInflater.inflate(R.layout.your_webview_layout, null); final WebView webView = (WebView) v.findViewById(R.id.your_webview_id); // more code... 

…. más tarde después de que WebView mi WebView ….

 // first, remove the parent of WebView from it's old parent so can be assigned a new one. ViewGroup vg = (ViewGroup) webView.getParent(); vg.removeAllViews(); // put WebView in Dialog box alert.setView(webView); alert.show(); 

Con Kotlin, puedes usar:

 val content = LayoutInflater.from(context).inflate(R.layout.[custom_layout_name], null) [your_main_layout].apply { //.. addView(content) } 

Si está intentando 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); 

AttachToRoot establecido en True

Solo creo que especificamos un botón en un archivo de diseño XML con su ancho de diseño y altura de diseño establecidos en match_parent.

  

En este botón, haga clic en Evento. Podemos configurar el siguiente código para inflar el diseño en esta actividad.

 LayoutInflater inflater = LayoutInflater.from(getContext()); inflater.inflate(R.layout.yourlayoutname, this); 

Espero que esta solución funcione para ti.

Había usado 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);