android developer - Come gonfiare una vista con un layout




inflater inside (11)

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

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.


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

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

layout di inflazione

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

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.


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


Con Kotlin puoi usare:

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

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

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


Anche il modo più semplice è usare

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

"Tools: context" è uno degli attributi di progettazione che può facilitare la creazione di layout in XML nel framework di sviluppo. Questo attributo viene utilizzato per mostrare al framework di sviluppo la classe di attività selezionata per l'implementazione del layout. Utilizzando "strumenti: contesto", Android Studio sceglie automaticamente il tema necessario per l'anteprima.

Se desideri saperne di più su alcuni altri attributi e strumenti utili per lo sviluppo di app per Android, dai un'occhiata a questa recensione: http://cases.azoft.com/4-must-know-tools-for-effective-android-development/





android android-layout layout-inflater android-inflate