web-dev-qa-db-fra.com

Android: comment inclure dynamiquement une mise en page XML?

Je veux décomposer mon interface utilisateur en plusieurs dispositions XML. Le premier serait la disposition principale, et les autres seraient les dispositions de contenu.

Je voudrais pouvoir définir quel content_layout doit être inclus dynamiquement au moment de l'exécution, donc je ne veux pas définir un "layout="@+layout/content_layout" dans mon fichier XML.

Voici mes mises en page:

main_layout.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="600dp"
    Android:layout_height="800dp" >

    <TextView
        Android:id="@+id/title"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:layout_alignParentTop="true" />

    <include /> <!-- I WANT TO INCLUDE MY CONTENT HERE -->

    <Button
        Android:id="@+id/cancelButton"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_alignParentBottom="true"
        Android:layout_centerHorizontal="true"
        Android:text="Cancel" />

</RelativeLayout>

content_layout.xml:

<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/whatever"
    Android:layout_height="wrap_content"
    Android:layout_width="fill_parent" />

content_layout2.xml:

<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/whatever2"
    Android:layout_height="wrap_content"
    Android:layout_width="fill_parent" />

Comment puis je faire ça?

Merci!

35
nbarraille
<RelativeLayout Android:id="@+id/rl" ...

Dans votre code:

// get your outer relative layout
RelativeLayout rl = (RelativeLayout) findById(R.id.rl);


// inflate content layout and add it to the relative layout as second child
// add as second child, therefore pass index 1 (0,1,...)

LayoutInflater layoutInflater = (LayoutInflater) 
        this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);    
rl.addView(1, layoutInflater.inflate(R.layout.content_layout, this, false) ); 
39
Mathias Conradt

Vous pouvez essayer d'utiliser un ViewStub et simplement changer la disposition qu'il va gonfler par programme.

Cette réponse traite de l'utilisation d'un ViewStub.

5
Bryan Denny