Ich habe ein Layout in XML definiert. 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 einer anderen XML-Layoutdatei aufblasen. Ich kann je nach Situation unterschiedliche Layouts verwenden. Wie soll ich das machen Ich habe verschiedene Variationen von ausprobiert
RelativeLayout item = (RelativeLayout) findViewById(R.id.item);
item.inflate(...)
Aber keiner von ihnen hat gut funktioniert.
android
android-layout
layout-inflater
android-inflate
Michal Dymel
quelle
quelle
Sie blasen eine XML-Ressource auf. Siehe das LayoutInflater-Dokument .
Wenn sich Ihr Layout in einem befindet mylayout.xml befindet , würden Sie Folgendes tun:
quelle
Obwohl späte Antwort, möchte aber diesen einen Weg hinzufügen, um dies zu bekommen
Wo
item
ist das übergeordnete Layout, in dem Sie ein untergeordnetes Layout hinzufügen möchten?quelle
R
Ressourcen nicht als Verweise auf ein Objekt verwenden, sie sind nurint
s. Sie müssenfindViewById
dieR
Ressource übergeben und dann cast an das gewünschte Objekt eingeben. Dann können Sie es in Funktionsaufrufen wie verwendeninflate
. (dhViewGroup item = (ViewGroup) findViewById(R.layout.activity_layout);
... dann können Sieitem
wie oben verwenden.)RelativeLayout
anstelle vonViewGroup
dort verwenden, da Sie die Basisklasse nicht instanziieren könnenViewGroup
. 5-Minuten-Bearbeitungsregel hat mich erwischt. lolEs ist hilfreich, dies hinzuzufügen, obwohl es sich um einen alten Beitrag handelt: Wenn die untergeordnete Ansicht, die aus XML aufgeblasen wird, einem Ansichtsgruppenlayout hinzugefügt werden soll, müssen Sie "Aufblasen" mit einem Hinweis darauf aufrufen, um welche Art von Ansichtsgruppe es sich handelt hinzugefügt werden. Mögen:
Die Aufblasmethode ist ziemlich überlastet und beschreibt diesen Teil der Verwendung in den Dokumenten. Ich hatte ein Problem, bei dem eine einzelne aus XML aufgeblasene Ansicht im übergeordneten Element nicht richtig ausgerichtet wurde, bis ich diese Art von Änderung vorgenommen habe.
quelle
Noch einfacher ist die Verwendung
quelle
View.inflate()
ist der beste Weg, nicht unnötigLayoutInflater
odergetSystemService(Context.LAYOUT_INFLATER_SERVICE)
oder irgendetwas von all dem Ärgernis! : DLayout Inflation
quelle
Wenn Sie nicht in einer Aktivität sind, können Sie die statische
from()
Methode aus derLayoutInflater
Klasse verwenden, um eine zu erhaltenLayoutInflater
, oder den Dienst auch über die Kontextmethode anforderngetSystemService()
:(Ich weiß, es ist fast 4 Jahre her, aber immer noch erwähnenswert)
quelle
Wenn Sie eine einzelne Ansicht mehrmals hinzufügen möchten, müssen Sie verwenden
Wenn du magst
und
dann wird eine Ausnahme aller fertig hinzugefügten Ansichten ausgelöst.
quelle
AttachToRoot Auf True setzen
Stellen Sie sich vor, wir haben eine Schaltfläche in einer XML-Layoutdatei angegeben, deren Layoutbreite und Layouthöhe auf match_parent festgelegt sind.
Klicken Sie auf diese Schaltflächen auf Ereignis. Wir können den folgenden Code festlegen, um das Layout für diese Aktivität zu erhöhen.
Hoffe, diese Lösung funktioniert für Sie.!
quelle
Versuchen Sie diesen Code:
quelle
Ich hatte es aufgrund meiner besonderen Umstände am schwersten mit diesem Fehler, fand aber schließlich eine Lösung.
Meine Situation: Ich verwende eine separate Ansicht (XML), die a enthält
WebView
und dann in einer geöffnet wird,AlertDialog
wenn ich in meiner Hauptaktivitätsansicht auf eine Schaltfläche klicke. Aber irgendwieWebView
gehörte die zur Hauptaktivitätsansicht (wahrscheinlich, weil ich die Ressource von hier abrufe), also musste ich kurz bevor ich sie meinerAlertDialog
(als Ansicht) zuordnete , die Eltern von mir holenWebView
, sie in eineViewGroup
, Entfernen Sie dann alle Ansichten dazuViewGroup
. Dies funktionierte und mein Fehler ging weg..... später nachdem ich meine
WebView
....quelle
Wenn Sie versuchen, eine untergeordnete Ansicht an das RelativeLayout anzuhängen? Sie können tun, indem Sie folgen
quelle
Mit Kotlin können Sie Folgendes verwenden:
quelle
Ich hatte unten einen Codeausschnitt dafür verwendet und es funktionierte für mich.
quelle