Pregunta

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.

¿Fue útil?

Solución

No estoy seguro de que han seguido sus pregunta- ¿Estás tratando de adjuntar un niño, vista a la RelativeLayout? Si lo que desea hacer algo a lo largo de las líneas de:

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

Otros consejos

inflar un recurso XML. Vea la LayoutInflater doc .

Si su diseño es en un mylayout.xml , que 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);

A pesar de la respuesta tardía, pero me gustaría añadir que una manera de conseguir esto

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

donde item es la disposición de los padres en la que desea agregar una distribución niño.

Es útil para añadir a esto, a pesar de que es una entrada antigua, que si el punto de vista del niño que está siendo inflado de XML es que se añade a una ViewGroup diseño, es necesario inflar llamada con una pista de qué tipo de ViewGroup que va a ser añadido a. Como:

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

El método de inflado es muy sobrecargado y describe esta parte del uso en la documentación. He tenido un problema en una sola vista inflada de XML no se alinea en la matriz adecuadamente hasta que hice este tipo de cambio.

manera aún más sencilla es utilizar

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

inflación 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ás en una actividad que se puede utilizar el método from() estática de la clase LayoutInflater para obtener una LayoutInflater, o solicitar el servicio desde el getSystemService() método contexto 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 casi 4 años, pero todavía vale la pena mencionar)

Si desea agregar una vista única varias veces, 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 arrojará una excepción de todas las vistas ya agregadas.

AttachToRoot Set True

Sólo pensamos que especificamos un botón en un archivo de diseño de XML con su anchura y la altura de diseño diseño de conjunto de match_parent.

<Button xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/custom_button">
</Button>

En esta botones Haga clic Evento podemos establecer siguiente código para inflar diseño de esta actividad.

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

La esperanza esta solución funciona para usted.!

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 utilizando una vista separada (XML) que tiene una WebView, a continuación, se abre en una AlertDialog al hacer clic en un botón en mi opinión, la principal actividad. Pero de alguna manera u otra la WebView pertenecía a la vista principal de la actividad (probablemente porque me tire el recurso de aquí), por lo que justo antes de que asigné a mi AlertDialog (como una vista), que tenía que conseguir que el padre de mi WebView, ponerlo en un ViewGroup, a continuación, eliminar todos los puntos de vista sobre que ViewGroup. Esto funcionó, y mi error fue.

// 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 he cargado 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();

Si estás tratando de adjuntar un niño, vista a la RelativeLayout? se puede hacer siguiendo

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

Prueba este código:

  1. Si lo que desea es para inflar su diseño:

View view = LayoutInflater.from(context).inflate(R.layout.your_xml_layout,null); // Code for inflating xml layout
RelativeLayout item = view.findViewById(R.id.item);   

  1. Si desea inflar su diseño en un recipiente (disposición de los padres):

LinearLayout parent = findViewById(R.id.container);        //parent layout.
View view = LayoutInflater.from(context).inflate(R.layout.your_xml_layout,parent,false); 
RelativeLayout item = view.findViewById(R.id.item);       //initialize layout & By this you can also perform any event.
parent.addView(view);             //adding your inflated layout in parent layout.

Con Kotlin, puede utilizar:

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

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

Había utilizado a continuación fragmento de código para esto y que trabajó para mí.

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

No se necesita ninguna complejidad que sólo simple como

 setContentView(R.layout.your_layout);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top