2013-06-14 16 views
26

Ich kann die Verwendung von LayoutInflater in Android nicht verstehen.Was macht die Klasse LayoutInflater? (in Android)

Was genau ist die Rolle von LayoutInflater und wie man es für eine einfache Android-App verwendet?

+2

Die Dokumentation auf developers.android und im öffentlichen Internet gibt eine Menge für dieses ... – gunar

+0

'LayoutInflater' erlaubt Ihnen, Ansicht von und der Verwendung einer XML-Layout-Datei zu erstellen, genannt" Inflation "()' – Geros

Antwort

47

Was ist Layoutinflater?

LayoutInflater ist eine Klasse (Wrapper irgendeiner Implementierung oder Dienstleistung), können Sie eine bekommen:

LayoutInflater li = LayoutInflater.from(context); 

Wie Layoutinflater benutzen?

Sie füttern es eine XML-Layout-Datei. Sie müssen nicht die vollständige Dateiadresse angeben, sondern nur ihre Ressourcen-ID, die automatisch in der Klasse R für Sie generiert wird. Zum Beispiel kann ein Layout-Datei, die wie folgt aussehen:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:orientation="vertical" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent"> 

    <TextView 
      android:id="@+id/text_view" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent"/> 

</LinearLayout> 

als /res/layout/my_layout.xml gespeichert.

Sie geben es LayoutInflater wie:

View v = li.inflate(R.layout.my_layout,null,false); 

Was hat Layout-Inflater tun?

Das v ist nun ein Objekt LinearLayout(LinearLayout erstreckt View), und enthält ein TextView Objekt, in genau dieser Reihenfolge angeordnet sind und mit allen Eigenschaften festgelegt, wie wir oben im XML beschrieben.


TL; DR: A LayoutInflater liest eine XML, in denen wir beschreiben, wie wir ein UI-Layout sein wollen. Es erstellt dann tatsächliche View Objekte für UI von diesem XML.

+2

Warum ist es ist besser/anders als View v = findViewById (R.layout.my_layout); ? (Sorry für die lahme Frage, ich bin auch ein Anfänger) –

+7

@ Mitulátbáti 'findViewById' ist für die Suche einer ** bereits erstellt ** View. –

0

Es ist sehr wahrscheinlich geschlossen werden, aber die Rolle der Layout inflater ist ein view von der mitgelieferten Layoutdatei

View row=getLayoutInflater.inflate(R.layout.list_item,parent,false); 

es schafft den Blick von der R.layout.list_item Datei und dass view beweisen zu erstellen.

8

Wenn Sie setContentView(layout file name) ausführen, können Sie findViewById(id of the widget) ausführen. Sie müssen nicht etwas wie xyz.findViewById tun. Der Kontext Ihrer App wird auf diese Layoutdatei gesetzt und alle findBiewById-Aufrufe beziehen sich auf diese Layoutdatei.

Es gibt Fälle, in denen Sie eine weitere Layoutdatei abrufen müssen, z. B. CustomDialog, ListElement oder Custom Toast. Zu diesem Zeitpunkt möchten Sie keine Aktivität nur für diese kleinen UI-Komponenten erstellen, wenn Sie programmgesteuert einen programmatischen Verweis auf Ihre Layoutdatei benötigen, damit Sie findViewById darauf ausführen können.

Aufblasen, bläst das Layout wie ein Ballon und geben Sie den Ballon für Sie um alle Farben und Objekte zu sehen, die darauf gezeichnet :). Aufblasen gibt Ihnen den Objektverweis auf dieses Layout, um findViewById aufzurufen.

Hoffe, dass dies klärt.

2

aus dem Android docs:

instanziert ein Layout XML-Datei in die entsprechenden Objekte anzeigen. Es wird niemals direkt verwendet. Verwenden Sie stattdessen getLayoutInFlater() oder getSystemService (String), um eine Standard-LayoutInflater-Instanz abzurufen, die bereits mit dem aktuellen Kontext verbunden und für das Gerät, auf dem Sie ausgeführt werden, ordnungsgemäß konfiguriert ist. Zum Beispiel:

LayoutInflater inflater = (LayoutInflater)context.getSystemService 
     (Context.LAYOUT_INFLATER_SERVICE); 

Nützlich bei der Erstellung von benutzerdefinierten Ansichten

See

5

Einige Grundlagen für LayoutInflater-

  • LayoutInflater wird verwendet, Layout mit Android Bildschirm vordefinierten XML zu manipulieren.
  • Diese Klasse wird zum Instanziieren der XML-Layoutdatei in die entsprechenden View-Objekte verwendet.

  • Es wird nie direkt verwendet. Stattdessen

  • Verwenden Sie getLayoutInflater() oder getSystemService(String), um eine standardmäßige LayoutInflater-Instanz abzurufen, die bereits an den aktuellen Kontext angeschlossen ist.
Verwandte Themen