J'ai une mise en page définie en XML. Il contient aussi:
<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 présentation XML. Je peux utiliser différentes configurations en fonction de la situation. Comment devrais-je le faire? J'essayais différentes variantes de
RelativeLayout item = (RelativeLayout) findViewById(R.id.item);
item.inflate(...)
Mais aucun d'entre eux n'a bien fonctionné.
Je ne suis pas sûr d'avoir suivi votre question: essayez-vous d'attacher une vue enfant à RelativeLayout? Si oui, vous voulez faire quelque chose dans le sens de:
RelativeLayout item = (RelativeLayout)findViewById(R.id.item);
View child = getLayoutInflater().inflate(R.layout.child, null);
item.addView(child);
Vous gonflez une ressource XML. Voir le document LayoutInflater doc .
Si votre mise en page se trouve dans un fichier mylayout.xml, procédez comme suit:
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);
Bien que la réponse soit tardive, Mais je voudrais ajouter qu’une façon d’obtenir ceci
LayoutInflater layoutInflater = (LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = layoutInflater.inflate(R.layout.mylayout, item );
où item
est la disposition parente à laquelle vous souhaitez ajouter une disposition enfant.
Il est utile d'ajouter à cela, même s'il s'agit d'un ancien message, que si la vue enfant gonflée à partir de xml doit être ajoutée à une présentation de groupe de vue, vous devez appeler inflate avec un indice du type de groupe de vue utilisé. être ajouté à. Comme:
View child = getLayoutInflater().inflate(R.layout.child, item, false);
La méthode inflate est assez surchargée et décrit cette partie de l'utilisation dans les documents. J'ai eu un problème lorsqu'une vue gonflée à partir de xml ne s'alignait pas correctement dans le parent jusqu'à ce que je fasse ce type de changement.
Encore plus simple est d’utiliser
View child = View.inflate(context, R.layout.child, null)
item.addChild(child) //attach to your item
inflation de la mise en page
View view = null;
LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.mylayout, null);
main.addView(view);
Si vous ne faites pas d'activité, vous pouvez utiliser la méthode statique from()
de la classe LayoutInflater
pour obtenir un LayoutInflater
ou demander le service à partir de la méthode contextuelle getSystemService()
:
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);
(Je sais que ça fait presque 4 ans mais ça vaut la peine de le mentionner)
Vérifiez ce lien. Il a la réponse-> https://possiblemobile.com/2013/05/layout-inflation-as-intended/
Si vous souhaitez ajouter une seule vue plusieurs fois, vous devez utiliser
layoutInflaterForButton = getActivity().getLayoutInflater();
for (int noOfButton = 0; noOfButton < 5; noOfButton++) {
FrameLayout btnView = (FrameLayout) layoutInflaterForButton.inflate(R.layout.poll_button, null);
btnContainer.addView(btnView);
}
Si vous aimez
layoutInflaterForButton = getActivity().getLayoutInflater();
FrameLayout btnView = (FrameLayout) layoutInflaterForButton.inflate(R.layout.poll_button, null);
et
for (int noOfButton = 0; noOfButton < 5; noOfButton++) {
btnContainer.addView(btnView);
}
alors il jettera une exception de toutes les vues ajoutées.
AttachToRoot défini sur True
Il suffit de penser que nous avons spécifié un bouton dans un fichier de mise en page XML avec sa largeur et sa hauteur de mise définies pour match_parent.
<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>
Sur ces boutons, cliquez sur l'événement, nous pouvons définir le code suivant pour gonfler la présentation de cette activité.
LayoutInflater inflater = LayoutInflater.from(getContext());
inflater.inflate(R.layout.yourlayoutname, this);
J'espère que cette solution fonctionne pour vous.
Si vous essayez d’attacher une vue enfant à RelativeLayout? vous pouvez le faire en suivant
RelativeLayout item = (RelativeLayout)findViewById(R.id.item);
View child = getLayoutInflater().inflate(R.layout.child, item, true);
J'ai eu le plus de difficulté avec cette erreur, à cause de ma situation particulière, mais j'ai finalement trouvé une solution.
Ma situation: j'utilise une vue distincte (XML) qui contient une WebView
, puis s'ouvre dans une AlertDialog
lorsque je clique sur un bouton de ma vue d'activité principale. Mais d’une manière ou d’une autre, la WebView
appartenait à la vue principale de l’activité (probablement parce que je tire la ressource d’ici), aussi, juste avant de l’assigner à ma AlertDialog
(vue), je devais obtenir le parent de ma WebView
, dans une ViewGroup
, puis supprimez toutes les vues sur cette ViewGroup
. Cela a fonctionné et mon erreur est partie.
// 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...
.... plus tard après avoir chargé ma WebView
....
// 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();
Avec Kotlin, vous pouvez utiliser:
val content = LayoutInflater.from(context).inflate(R.layout.[custom_layout_name], null)
[your_main_layout].apply {
//..
addView(content)
}
Pas besoin de complexité, c'est aussi simple que
setContentView(R.layout.your_layout);
Essayez ce code:
View view = LayoutInflater.from(context).inflate(R.layout.your_xml_layout,null); // Code for inflating xml layout
RelativeLayout item = view.findViewById(R.id.item);
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.