inside - android inflate programmatically




Come gonfiare una vista con un layout (8)

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.


È utile aggiungere a questo, anche se si tratta di un vecchio post, che se la vista secondaria gonfiata da xml deve essere aggiunta a un layout di un gruppo di vista, è necessario chiamare inflate con un indizio su quale tipo di viewgroup sta andando da aggiungere a Piace:

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

Il metodo di gonfiaggio è piuttosto sovraccarico e descrive questa parte dell'utilizzo nei documenti. Ho avuto un problema in cui una singola visualizzazione gonfiata da xml non si allineava correttamente nel genitore finché non ho apportato questo tipo di modifica.


Anche il modo più semplice è usare

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

Con Kotlin puoi usare:

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

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


Ho usato sotto lo snippet di codice per questo e ha funzionato per me.

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

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

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.


Si gonfia una risorsa XML. Vedi il documento LayoutInflater .

Se il tuo layout è in un file mylayout.xml , dovresti fare qualcosa come:

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




android-inflate