android developer - Come gonfiare una vista con un layout




6 Answers

Non sono sicuro di aver seguito la tua domanda: stai provando ad allegare una vista secondaria a RelativeLayout? Se è così, vuoi fare qualcosa sulla falsariga di:

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

Ho un layout definito in XML. Contiene anche:

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

Vorrei gonfiare questo RelativeView con altri file di layout XML. Potrei usare layout diversi a seconda della situazione. Come dovrei farlo? Stavo provando diverse varianti di

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

Ma nessuno di loro ha funzionato bene.




Anche se in ritardo risposta, ma vorrei aggiungere che un modo per ottenere questo

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

dove item è il layout genitore in cui si desidera aggiungere un layout figlio.




Anche il modo più semplice è usare

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



Se non ci si trova in un'attività è possibile utilizzare il metodo static from() della classe LayoutInflater per ottenere un LayoutInflater o richiedere il servizio anche dal metodo di contesto getSystemService() :

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

(So ​​che è quasi 4 anni fa, ma vale comunque la pena menzionarlo)




Se vuoi aggiungere una singola vista più volte, allora devi usare

   layoutInflaterForButton = getActivity().getLayoutInflater();

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

Se ti piace

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

e

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

quindi genererà l'eccezione di tutte le viste già pronte.




Con Kotlin puoi usare:

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

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



Related

android android-layout layout-inflater android-inflate