Question

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 mise en page XML. Je peux utiliser différentes mises en page en fonction d'une situation. Comment dois-je faire? Je tentais différentes variations de

RelativeLayout item = (RelativeLayout) findViewById(R.id.item);
item.inflate(...)

Mais aucun d'entre eux a bien fonctionné.

Était-ce utile?

La solution

Je ne suis pas sûr que j'ai suivi votre question- vous essayez de joindre une vue enfant au RelativeLayout? Si donc vous voulez faire quelque chose le long des lignes de:

RelativeLayout item = (RelativeLayout)findViewById(R.id.item);
View child = getLayoutInflater().inflate(R.layout.child, null);
item.addView(child);

Autres conseils

Vous gonflez une ressource XML. Voir la LayoutInflater doc .

Si votre mise en page est dans une mylayout.xml , vous feriez quelque chose comme:

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 réponse tardive, mais je voudrais ajouter que d'une façon d'obtenir ce

LayoutInflater layoutInflater = (LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View view = layoutInflater.inflate(R.layout.mylayout, item );

item est la mise en page de parent où vous souhaitez ajouter une mise en page de l'enfant.

Il est utile d'ajouter à cela, même si elle est un ancien poste, que si le point de vue de l'enfant qui est gonflé de xml doit être ajouté à une mise en page de viewgroup, vous devez appeler gonflez avec un indice de ce type de viewgroup il va être ajouté à. Comme:

View child = getLayoutInflater().inflate(R.layout.child, item, false);

La méthode décompressé est assez surchargé et décrit cette partie de l'utilisation dans les documents. J'ai eu un problème où une vue unique gonflé de XML n'a pas été dans le parent d'aligner correctement jusqu'à ce que je fait ce type de changement.

façon encore plus simple est d'utiliser

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

inflation layout

View view = null;
LayoutInflater inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
view = inflater.inflate(R.layout.mylayout, null);
main.addView(view);

Si vous n'êtes pas dans une activité que vous pouvez utiliser la méthode from() statique de la classe LayoutInflater pour obtenir un LayoutInflater, ou demander le service de la méthode de contexte getSystemService() aussi:

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 qu'il est presque il y a 4 ans, mais toujours utile de mentionner)

Si vous souhaitez ajouter un seul point de vue du temps multiple alors 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 faites comme

   layoutInflaterForButton = getActivity().getLayoutInflater();
    FrameLayout btnView = (FrameLayout) layoutInflaterForButton.inflate(R.layout.poll_button, null);

et

for (int noOfButton = 0; noOfButton < 5; noOfButton++) {
            btnContainer.addView(btnView);
        }

il va jeter exception de tous vue prêt ajouté.

AttachToRoot Set True

Il suffit de penser que nous avons spécifié un bouton dans un fichier de configuration XML avec sa hauteur de largeur de mise en page et mise en page définie sur 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>

Ce bouton Cliquez sur l'événement nous pouvons définir Suite code pour la mise en page Gonfler sur cette activité.

LayoutInflater inflater = LayoutInflater.from(getContext());
inflater.inflate(R.layout.yourlayoutname, this);

Hope cette solution fonctionne pour vous.

J'ai eu le plus de temps avec cette erreur, à cause de mes circonstances uniques, mais finalement trouvé une solution.

Ma situation: J'utilise une vue séparée (XML) qui est titulaire d'un WebView, ouvre alors dans un AlertDialog lorsque je clique sur un bouton dans ma vue principale activité. Mais d'une certaine manière ou d'une autre l'WebView appartenait à la vue de l'activité principale (probablement parce que je tire la ressource d'ici), donc juste avant que je lui assignait à mon AlertDialog (en vue), je devais obtenir le parent de mon WebView, mettre dans un ViewGroup, puis retirer tous les points de vue sur cette ViewGroup. Cela a fonctionné, et mon erreur a disparu.

// 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 que je chargé mon 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();

Si vous vous essayez de joindre une vue enfant au RelativeLayout? vous pouvez le faire en suivant

RelativeLayout item = (RelativeLayout)findViewById(R.id.item);
View child = getLayoutInflater().inflate(R.layout.child, item, true);

Essayez ce code:

  1. Si vous voulez juste pour 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 voulez gonfler votre disposition dans le récipient (mise en page de 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.

Avec Kotlin, vous pouvez utiliser:

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

[your_main_layout].apply {
    //..
    addView(content)
}

Je l'avais utilisé ci-dessous extrait de code pour cela et cela a fonctionné pour moi.

LinearLayout linearLayout = (LinearLayout)findViewById(R.id.item);
View child = getLayoutInflater().inflate(R.layout.child, null);
linearLayout.addView(child);

Pas besoin toute la complexité juste simple que

 setContentView(R.layout.your_layout);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top