Ich habe ein in XML definiertes Layout. Es enthält auch:
<RelativeLayout
Android:id="@+id/item"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
/>
Ich möchte diese RelativeView mit anderen XML-Layoutdateien aufblasen. Ich kann je nach Situation unterschiedliche Layouts verwenden. Wie soll ich das machen? Ich habe verschiedene Varianten ausprobiert
RelativeLayout item = (RelativeLayout) findViewById(R.id.item);
item.inflate(...)
Aber keiner von ihnen hat gut funktioniert.
Ich bin nicht sicher, ob ich Ihrer Frage gefolgt bin. Versuchen Sie, eine untergeordnete Ansicht an RelativeLayout anzuhängen? Wenn ja, möchten Sie etwas in der Art von tun:
RelativeLayout item = (RelativeLayout)findViewById(R.id.item);
View child = getLayoutInflater().inflate(R.layout.child, null);
item.addView(child);
Sie vergrößern eine XML-Ressource. Siehe LayoutInflater doc .
Wenn Ihr Layout in einer mylayout.xml ist, würden Sie Folgendes tun:
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);
Obwohl spät Antwort, aber ich möchte diesen Weg hinzufügen, um dies zu erhalten
LayoutInflater layoutInflater = (LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = layoutInflater.inflate(R.layout.mylayout, item );
dabei ist item
das übergeordnete Layout, in dem Sie ein untergeordnetes Layout hinzufügen möchten.
Es ist hilfreich, dies hinzuzufügen, auch wenn es sich um einen alten Beitrag handelt. Wenn die aus xml aufgebaute untergeordnete Ansicht zu einem Viewgroup-Layout hinzugefügt werden soll, müssen Sie inflate mit einem Hinweis auf den Typ der Viewgroup aufrufen hinzugefügt werden. Mögen:
View child = getLayoutInflater().inflate(R.layout.child, item, false);
Die Aufblasmethode ist ziemlich überlastet und beschreibt diesen Teil der Verwendung in den Dokumenten. Ich hatte ein Problem, bei dem eine aus xml aufgeblasene Einzelansicht nicht ordnungsgemäß im übergeordneten Element ausgerichtet wurde, bis ich diese Art von Änderung vorgenommen hatte.
Noch einfacher ist die Verwendung
View child = View.inflate(context, R.layout.child, null)
item.addChild(child) //attach to your item
layout Inflation
View view = null;
LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.mylayout, null);
main.addView(view);
Wenn Sie sich nicht in einer Aktivität befinden, können Sie die statische from()
-Methode der LayoutInflater
-Klasse verwenden, um eine LayoutInflater
abzurufen, oder den Service auch von der Kontextmethode getSystemService()
aus anfordern:
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);
(Ich weiß, es ist fast 4 Jahre her, aber immer noch erwähnenswert)
Überprüfen Sie diesen Link. Es hat die Antwort-> https://possiblemobile.com/2013/05/layout-inflation-as-intended/
Wenn Sie eine einzelne Ansicht mehrmals hinzufügen möchten, müssen Sie verwenden
layoutInflaterForButton = getActivity().getLayoutInflater();
for (int noOfButton = 0; noOfButton < 5; noOfButton++) {
FrameLayout btnView = (FrameLayout) layoutInflaterForButton.inflate(R.layout.poll_button, null);
btnContainer.addView(btnView);
}
Wenn du magst
layoutInflaterForButton = getActivity().getLayoutInflater();
FrameLayout btnView = (FrameLayout) layoutInflaterForButton.inflate(R.layout.poll_button, null);
und
for (int noOfButton = 0; noOfButton < 5; noOfButton++) {
btnContainer.addView(btnView);
}
dann wird eine Ausnahme von allen fertig hinzugefügten Ansichten ausgelöst.
AttachToRoot auf True gesetzt
Stellen Sie sich vor, wir haben in einer XML-Layoutdatei eine Schaltfläche angegeben, deren Layoutbreite und Layouthöhe auf "match_parent" eingestellt ist.
<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>
Klicken Sie auf diese Schaltflächen, wenn Sie auf Ereignis klicken, um den folgenden Code so einzustellen, dass das Layout dieser Aktivität aufgeblasen wird.
LayoutInflater inflater = LayoutInflater.from(getContext());
inflater.inflate(R.layout.yourlayoutname, this);
Hoffen Sie, dass diese Lösung für Sie funktioniert.
Wenn Sie versuchen, eine untergeordnete Ansicht an das RelativeLayout anzuhängen? Sie können dies tun, indem Sie folgen
RelativeLayout item = (RelativeLayout)findViewById(R.id.item);
View child = getLayoutInflater().inflate(R.layout.child, item, true);
Ich hatte die schwerste Zeit mit diesem Fehler aufgrund meiner besonderen Umstände, fand aber schließlich eine Lösung.
Meine Situation: Ich verwende eine separate Ansicht (XML), die eine WebView
enthält und dann in einer AlertDialog
geöffnet wird, wenn ich in meiner Hauptaktivitätsansicht auf eine Schaltfläche klicke. Aber irgendwie oder anders gehörte die WebView
zur Hauptaktivitätsansicht (wahrscheinlich, weil ich die Ressource von hier aus ziehe), also direkt bevor ich sie meiner AlertDialog
(als Ansicht) zuordnete, musste ich den Elternteil meiner WebView
holen in eine ViewGroup
, entfernen Sie dann alle Ansichten dieser ViewGroup
. Das hat funktioniert, und mein Fehler ist verschwunden.
// 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...
.... später nachdem ich meine WebView
geladen habe ....
// 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();
Mit Kotlin können Sie Folgendes verwenden:
val content = LayoutInflater.from(context).inflate(R.layout.[custom_layout_name], null)
[your_main_layout].apply {
//..
addView(content)
}
Es ist keine Komplexität erforderlich
setContentView(R.layout.your_layout);
Versuchen Sie diesen Code:
View view = LayoutInflater.from(context).inflate(R.layout.your_xml_layout,null); // Code for inflating xml layout
RelativeLayout item = view.findViewById(R.id.item);
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.