[Android] Cómo inflar una vista con un diseño



Answers

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);
Question

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 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.




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();



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.




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);






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);



Links