web-dev-qa-db-fra.com

Comment gonfler une vue avec une mise en page

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é.

201
Michal Dymel

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

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

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

item est la disposition parente à laquelle vous souhaitez ajouter une disposition enfant.

24
Shaista Naaz

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.

18
Maximus

Encore plus simple est d’utiliser

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

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);
8
Happy Singh

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)

6
Juan Cortés
4
Akshayraj Kore

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.

3
John smith

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.

3
eSparkBiz Team

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

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

Avec Kotlin, vous pouvez utiliser:

val content = LayoutInflater.from(context).inflate(R.layout.[custom_layout_name], null)

[your_main_layout].apply {
    //..
    addView(content)
}
1
Hasan A Yousef

Pas besoin de complexité, c'est aussi simple que

 setContentView(R.layout.your_layout);
0
Saddan

Essayez ce code:

  1. Si vous voulez juste gonfler votre mise en page:

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. Si vous souhaitez gonfler votre mise en page dans un conteneur (mise en page parent):

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
Developer's Life