Come per gonfiare una visualizzazione con un layout
-
22-09-2019 - |
Domanda
Ho un layout definito in XML. Contiene inoltre:
<RelativeLayout
android:id="@+id/item"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
Vorrei a gonfiare questo RelativeView con altri file di layout XML. Posso utilizzare i layout diversi a seconda di una situazione. Come devo fare? Stavo provando diverse varianti di
RelativeLayout item = (RelativeLayout) findViewById(R.id.item);
item.inflate(...)
Ma nessuno di loro ha funzionato bene.
Soluzione
Non sono sicuro che ho seguito il tuo Question- stai cercando di collegare una vista bambino al RelativeLayout? Se così si vuole fare qualcosa sulla falsariga di:
RelativeLayout item = (RelativeLayout)findViewById(R.id.item);
View child = getLayoutInflater().inflate(R.layout.child, null);
item.addView(child);
Altri suggerimenti
Si gonfia una risorsa XML. Vedere la LayoutInflater doc .
Se il layout è in una mylayout.xml , si potrebbe fare qualcosa di simile:
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 se la risposta in ritardo, 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 principale in cui si desidera aggiungere un layout bambino.
E 'utile aggiungere a questo, anche se è un vecchio post, che se la vista del bambino che viene gonfiato da XML deve essere aggiunto a un layout viewgroup, è necessario chiamare gonfiare con un indizio di ciò che tipo di viewgroup che sta per essere aggiunto. Come:
View child = getLayoutInflater().inflate(R.layout.child, item, false);
Il metodo è abbastanza gonfiare sovraccarico e descrive questa parte l'utilizzo nei documenti. Ho avuto un problema in cui una singola vista gonfiato da XML non è stato allineando nel genitore correttamente fino a quando ho fatto questo tipo di cambiamento.
modo Ancora più semplice è quello di utilizzare
View child = View.inflate(context, R.layout.child, null)
item.addChild(child) //attach to your item
inflazione Layout
View view = null;
LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.mylayout, null);
main.addView(view);
Se non sei in un'attività è possibile utilizzare il metodo statico from()
dalla classe LayoutInflater
per ottenere un LayoutInflater
, o richiedere il servizio dal metodo contesto getSystemService()
troppo:
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);
(lo so che è quasi 4 anni fa, ma ancora degno di nota)
Se si desidera aggiungere una sola visione in tempo multiplo allora bisogna 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 lo fai come
layoutInflaterForButton = getActivity().getLayoutInflater();
FrameLayout btnView = (FrameLayout) layoutInflaterForButton.inflate(R.layout.poll_button, null);
e
for (int noOfButton = 0; noOfButton < 5; noOfButton++) {
btnContainer.addView(btnView);
}
allora getterà eccezione di tutti vista aggiunto pronti.
AttachToRoot Impostare a True
Basta pensare che abbiamo specificato un pulsante in un file di layout XML con la sua larghezza e il layout layout di altezza impostato 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>
In questa Bottoni Clicca Evento possiamo impostare seguente codice per gonfiare layout a questa attività.
LayoutInflater inflater = LayoutInflater.from(getContext());
inflater.inflate(R.layout.yourlayoutname, this);
La speranza questa soluzione funziona per voi.!
ho avuto il momento più difficile con questo errore, a causa delle mie circostanze uniche, ma finalmente trovato una soluzione.
La mia situazione: Sto usando una vista separata (XML) che detiene una WebView
, poi si apre in un AlertDialog
quando si fa clic su un pulsante nel mio principale vista attività. Ma in qualche modo o in un altro il WebView
apparteneva alla vista attività principale (probabilmente perché ho tirare la risorsa da qui), quindi a destra prima ho assegnato al mio AlertDialog
(come vista), ho dovuto ottenere il padre del mio WebView
, metterlo in un ViewGroup
, quindi rimuovere tutti i punti di vista 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...
.... più tardi dopo che 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();
Se stai cercando di collegare una vista bambino al RelativeLayout? si può fare seguendo
RelativeLayout item = (RelativeLayout)findViewById(R.id.item);
View child = getLayoutInflater().inflate(R.layout.child, item, true);
Prova questo codice:
- Se si desidera solo per gonfiare il layout:
View view = LayoutInflater.from(context).inflate(R.layout.your_xml_layout,null); // Code for inflating xml layout
RelativeLayout item = view.findViewById(R.id.item);
- Se si vuole gonfiare il layout in contenitore (layout di genitore):
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, è possibile utilizzare:
val content = LayoutInflater.from(context).inflate(R.layout.[custom_layout_name], null)
[your_main_layout].apply {
//..
addView(content)
}
avevo usato sotto frammento 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 necessita di nessuna complessità è proprio semplice come
setContentView(R.layout.your_layout);