À quoi sert LayoutInflater
Android?
android
layout-inflater
android-inflate
user386430
la source
la source
Réponses:
Lorsque vous utilisez une vue personnalisée dans un,
ListView
vous devez définir la disposition des lignes. Vous créez un xml où vous placez des widgets Android, puis dans le code de l'adaptateur, vous devez faire quelque chose comme ceci:En savoir plus dans la documentation officielle .
la source
View view = convertView; if (view == null) { view = mInflater.... }
LayoutInflater
, bien qu'elle explique où l'utiliser. La réponse 1-down est meilleure.La classe LayoutInflater est utilisée pour instancier le contenu des fichiers XML de disposition dans leurs objets View correspondants.
En d'autres termes, il prend un fichier XML en entrée et en construit les objets View.
la source
single_list_item.xml
fichier pour chaque ligne d'un fichierListView
. L'utilisation de ce fichier XML est-elle un peu comme un gonfleur?Que fait
LayoutInflator
-il?Quand j'ai commencé la programmation Android pour la première fois, j'étais vraiment confus par
LayoutInflater
etfindViewById
. Parfois, nous avons utilisé l'un et parfois l'autre.LayoutInflater
est utilisé pour créer un nouvelView
(ouLayout
) objet à partir de l'une de vos dispositions xml.findViewById
vous donne simplement une référence à une vue qui a déjà été créée. Vous pourriez penser que vous n'avez créé aucune vue, mais chaque fois que vous appelezsetContentView
dansonCreate
, la mise en page de l'activité ainsi que ses sous - vues gets gonflé (créé) dans les coulisses.Donc, si la vue existe déjà, utilisez-la
findViewById
. Sinon, créez-le avec unLayoutInflater
.Exemple
Voici un mini projet que j'ai réalisé qui montre à la fois
LayoutInflater
etfindViewById
en action. Sans code spécial, la disposition ressemble à ceci.Le carré bleu est une disposition personnalisée insérée dans la disposition principale avec
include
(voir ici pour en savoir plus). Il a été gonflé automatiquement car il fait partie de la vue du contenu. Comme vous pouvez le voir, le code n'a rien de spécial.Maintenant, gonflons (créons) une autre copie de notre mise en page personnalisée et ajoutons-la.
Pour gonfler la nouvelle disposition de la vue, tout ce que j'ai fait a été de dire au gonfleur le nom de mon fichier xml (
my_layout
), la disposition parent à laquelle je veux l'ajouter (mainLayout
), et que je ne veux pas encore l'ajouter (false
) . (Je pourrais également définir le parent surnull
, mais les paramètres de disposition de la vue racine de ma disposition personnalisée seraient ignorés.)Le voici à nouveau dans son contexte.
Remarquez comment
findViewById
est utilisé uniquement après qu'une disposition a déjà été gonflée.Code supplémentaire
Voici le xml pour l'exemple ci-dessus.
activity_main.xml
my_layout.xml
Quand avez-vous besoin de LayoutInflater
RecyclerView
. (Voir cesRecyclerView
exemples pour une liste ou une grille .) Vous devez gonfler une nouvelle disposition pour chaque élément visible dans la liste ou la grille.la source
myLayout
est une vue, bien que j'aurais pu la gonfler en tant que RelativeLayout (voir my_layout.xml). Après l'avoir gonflé, je l'ajoute en tant que sous-vue du parent LinearLayout (c'est-à-diremainLayout
).LayoutInflater.inflate () fournit un moyen de convertir un fichier res / layout / *. Xml définissant une vue en un objet View réel utilisable dans le code source de votre application.
deux étapes de base: obtenir le gonfleur, puis gonfler la ressource
Comment obtenez-vous le gonfleur?
Comment obtenez-vous la vue en supposant que le fichier xml est "list_item.xml"?
la source
Voici un autre exemple similaire au précédent, mais étendu pour démontrer davantage les paramètres de gonflement et le comportement dynamique qu'il peut fournir.
Supposons que la disposition de vos lignes ListView puisse avoir un nombre variable de TextViews. Donc, vous gonflez d'abord la vue de l'élément de base (comme dans l'exemple précédent), puis bouclez en ajoutant dynamiquement TextViews au moment de l'exécution. En utilisant Android: layout_weight aligne également parfaitement tout.
Voici les ressources Layouts:
list_layout.xml
schedule_layout.xml
Remplacer la méthode getView dans l'extension de la classe BaseAdapter
Notez différents appels de méthode de gonflage:
la source
Cette classe est utilisée pour instancier un fichier XML de mise en page dans ses
View
objets correspondants . Il ne doit jamais être utilisé directement - utilisezgetLayoutInflater()
ougetSystemService(String)
pour récupérer uneLayoutInflater
instance standard qui est déjà connectée au contexte actuel et correctement configurée pour le périphérique sur lequel vous exécutez. Par exemple:Référence: http://developer.android.com/reference/android/view/LayoutInflater.html
la source
Gonfler signifie lire le fichier XML qui décrit une mise en page (ou élément GUI) et créer les objets réels qui lui correspondent, et ainsi rendre l'objet visible dans une application Android.
Ce fichier a pu être enregistré sous date_time_dialog.xml :
Ce fichier a pu être enregistré sous date_time_picker.xml :
La
MainActivity
classe enregistrée sous MainActivity.java :la source
Quel gonfleur fait
Il prend une disposition xml en entrée (par exemple) et la convertit en objet View.
Pourquoi besoin
Imaginons un scénario dans lequel nous devons créer une liste personnalisée. Maintenant, chaque ligne doit être personnalisée. Mais comment pouvons-nous le faire. Il n'est pas possible d'affecter une disposition xml à une ligne de listview. Nous créons donc un objet View. Ainsi, nous pouvons accéder aux éléments qu'il contient (textview, imageview etc.) et également affecter l'objet comme ligne de listview
Donc, chaque fois que nous devons assigner un objet de type vue quelque part et que nous avons notre conception xml personnalisée, nous le convertissons simplement en objet par gonfleur et nous l'utilisons.
la source
LayoutInflater est une classe utilisée pour instancier un fichier XML de disposition dans ses objets de vue correspondants qui peuvent être utilisés dans des programmes Java. En termes simples, il existe deux façons de créer une interface utilisateur dans Android. L'une est une méthode statique et une autre est dynamique ou programmatique. Supposons que nous ayons une mise en page simple main.xml ayant un
textview
et unedittext
comme suit.Nous pouvons afficher cette disposition de manière statique en
Une manière dynamique de créer une vue signifie que la vue n'est pas mentionnée dans notre main.xml, mais nous voulons l'afficher avec cela lors de l'exécution. Par exemple, nous avons un autre XML dans le dossier de disposition en tant que footer.xml
Nous voulons afficher cette zone de texte au moment de l'exécution dans notre interface utilisateur principale. Nous allons donc ici gonfler text.xml. Regarde comment:
Ici, j'ai utilisé getSystemService (String) pour récupérer une instance de LayoutInflater. Je peux aussi utiliser getLayoutInflator () pour gonfler au lieu d'utiliser getSystemService (String) comme ci-dessous:
la source
voici un exemple pour obtenir une réfrence pour la vue racine d'une mise en page, la gonfler et l'utiliser avec setContentView (vue View)
la source
L'inflateur de mise en page est une classe qui lit la description de l'apparence xml et les convertit en objets View basés sur java.
la source
ma liste de personnalisation espère qu'elle illustre le concept
la source
LayoutInflater est un composant fondamental d'Android. Vous devez l'utiliser tout le temps pour transformer des fichiers xml en hiérarchies de vues.
la source
LayoutInflater crée des objets View basés sur des dispositions définies en XML. Il existe plusieurs façons d'utiliser LayoutInflater, notamment la création de vues personnalisées, le gonflement des vues de fragment dans les vues d'activité, la création de boîtes de dialogue ou simplement le gonflement d'une vue de fichier de disposition dans une activité.
Il existe de nombreuses idées fausses sur le fonctionnement du processus d'inflation. Je pense que cela vient de la mauvaise documentation de la méthode inflate (). Si vous souhaitez en savoir plus sur la méthode inflate () en détail, j'ai écrit un blog à ce sujet ici:
https://www.bignerdranch.com/blog/understanding-androids-layoutinflater-inflate/
la source
Gonflez en fait une sorte de conversion en données, vues, instances, en représentation d'interface utilisateur visible .. ..il utilise alors le flux de données de peut-être des adaptateurs, etc. par programme. puis l'intégrer à un xml que vous avez défini, qui lui indique comment les données doivent être représentées dans l'interface utilisateur
la source