Come gonfiare una vista con un layout [android]


Answers

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

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.




layout di inflazione

View view = null;
LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
view = inflater.inflate(R.layout.mylayout, null);
main.addView(view);






Ho avuto il tempo più difficile con questo errore, a causa delle mie circostanze uniche, ma alla fine ho trovato una soluzione.

La mia situazione: sto usando una vista separata (XML) che contiene una WebView , quindi si apre in una AlertDialog quando AlertDialog su un pulsante nella mia vista principale dell'attività. Ma in un modo o nell'altro il WebView apparteneva alla vista principale dell'attività (probabilmente perché estraggo la risorsa da qui), quindi appena prima di assegnarlo al mio AlertDialog (come vista), dovevo ottenere il genitore della mia WebView , metterlo in un ViewGroup , quindi rimuovere tutte le viste su quel ViewGroup . Questo ha funzionato, e il mio errore è andato via.

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

.... dopo ho caricato la mia 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();