wake-up-neo.net

So blasen Sie eine Ansicht mit einem Layout auf

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.

201
Michal Dymel

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);
355
Graeme Duncan

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

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.

24
Shaista Naaz

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.

18
Maximus

Noch einfacher ist die Verwendung

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

layout Inflation

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

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)

6
Juan Cortés

Überprüfen Sie diesen Link. Es hat die Antwort-> https://possiblemobile.com/2013/05/layout-inflation-as-intended/

4
Akshayraj Kore

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.

3
John smith

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.

3
eSparkBiz Team

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);
2
Kasim Rangwala

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

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)
}
1
Hasan A Yousef

Es ist keine Komplexität erforderlich

 setContentView(R.layout.your_layout);
0
Saddan

Versuchen Sie diesen Code:

  1. Wenn Sie nur Ihr Layout aufblasen möchten:

View view = LayoutInflater.from(context).inflate(R.layout.your_xml_layout,null); // Code for inflating xml layout
RelativeLayout item = view.findViewById(R.id.item);   

  1. Wenn Sie Ihr Layout in einem Container (übergeordnetes Layout) aufblasen möchten:

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.

0