J'ai une mise en page définie en XML. Il contient également:
<RelativeLayout
android:id="@+id/item"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
Je voudrais gonfler ce RelativeView avec un autre fichier de disposition XML. Je peux utiliser différentes mises en page en fonction d'une situation. Comment dois-je procéder? J'essayais différentes variantes de
RelativeLayout item = (RelativeLayout) findViewById(R.id.item);
item.inflate(...)
Mais aucun d'entre eux n'a bien fonctionné.
android
android-layout
layout-inflater
android-inflate
Michal Dymel
la source
la source
Vous gonflez une ressource XML. Voir le doc LayoutInflater .
Si votre mise en page est dans un mylayout.xml , vous feriez quelque chose comme:
la source
Bien que la réponse soit tardive, mais j'aimerais ajouter cette façon d'obtenir ce
où
item
est la disposition parent à laquelle vous souhaitez ajouter une disposition enfant.la source
R
ressources comme références à un objet, ce ne sont que desint
s. Vous devez utiliser en luifindViewById
transmettant laR
ressource, puis tapez la convertir en l'objet souhaité. Ensuite, vous pouvez l'utiliser dans des appels de fonction commeinflate
. (c'est-à-direViewGroup item = (ViewGroup) findViewById(R.layout.activity_layout);
... alors vous pouvez utiliseritem
comme ci-dessus.)RelativeLayout
au lieu deViewGroup
là dans mon exemple ci-dessus, car vous ne pouvez pas instancier la classe de baseViewGroup
. La règle d'édition de 5 minutes m'a eu. lolIl est utile d'ajouter à cela, même s'il s'agit d'un ancien article, que si la vue enfant qui est gonflée à partir de xml doit être ajoutée à une disposition de groupe de vues, vous devez appeler gonfler avec un indice de quel type de groupe de vues il va à ajouter. Comme:
La méthode de gonflement est assez surchargée et décrit cette partie de l'utilisation dans les documents. J'ai eu un problème où une seule vue gonflée à partir de xml ne s'alignait pas correctement dans le parent jusqu'à ce que j'effectue ce type de modification.
la source
Un moyen encore plus simple consiste à utiliser
la source
View.inflate()
est le meilleur moyen, pas de nuisance inutileLayoutInflater
ougetSystemService(Context.LAYOUT_INFLATER_SERVICE)
de tout cela! : Dinflation de la mise en page
la source
Si vous n'êtes pas dans une activité, vous pouvez utiliser la
from()
méthode statique de laLayoutInflater
classe pour obtenir unLayoutInflater
, ou demander également le service à partir de la méthode de contextegetSystemService()
:(Je sais que c'est il y a presque 4 ans, mais mérite d'être mentionné)
la source
Si vous souhaitez ajouter une seule vue plusieurs fois, vous devez utiliser
Si vous aimez
et
alors il lèvera l'exception de toute vue ajoutée prête.
la source
AttachToRoot Set à True
Pensez simplement que nous avons spécifié un bouton dans un fichier de disposition XML avec sa largeur et sa hauteur de disposition définies sur match_parent.
Sur ces boutons, cliquez sur l'événement, nous pouvons définir le code suivant pour gonfler la disposition de cette activité.
J'espère que cette solution fonctionne pour vous.!
la source
Essayez ce code:
la source
J'ai eu le plus de mal avec cette erreur, à cause de ma situation unique, mais j'ai finalement trouvé une solution.
Ma situation: j'utilise une vue séparée (XML) qui contient un
WebView
, puis s'ouvre dans unAlertDialog
lorsque je clique sur un bouton dans ma vue d'activité principale. Mais d'une manière ou d'une autre, celaWebView
appartenait à la vue d'activité principale (probablement parce que je tire la ressource d'ici), donc juste avant de l'attribuer à maAlertDialog
(en tant que vue), je devais obtenir le parent de monWebView
, le mettre dans unViewGroup
, puis supprimez toutes les vues à ce sujetViewGroup
. Cela a fonctionné et mon erreur a disparu..... plus tard après avoir chargé mon
WebView
....la source
Si vous essayez d'attacher une vue enfant à RelativeLayout? vous pouvez faire en suivant
la source
Avec Kotlin, vous pouvez utiliser:
la source
J'avais utilisé l'extrait de code ci-dessous pour cela et cela a fonctionné pour moi.
la source