web-dev-qa-db-fra.com

Ajout d'une vue à un LinearLayout à une position spécifiée

J'ai le fichier main.xml suivant avec LinearLayout

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:orientation="vertical"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent"
    Android:weightSum="1" Android:id="@+id/llid">
    <TextView Android:text="Client profile"
    Android:id="@+id/ProfileName"
    Android:layout_width="fill_parent"
    Android:textStyle="bold"
    Android:layout_height="wrap_content"
    Android:gravity="center_horizontal">
    </TextView>    
    <TextView Android:text="Specs"
    Android:id="@+id/Specs"
    Android:layout_width="fill_parent"
    Android:textStyle="bold"
    Android:layout_height="wrap_content"
    Android:gravity="center_horizontal">
    </TextView>
</LinearLayout>

J'ajoute une image à LinearLayout via un code à l'exécution comme si

            ImageView image = new ImageView(this);
            image.setImageBitmap(bmp);
            LinearLayout ll = (LinearLayout) findViewById(R.id.llid);
            ll.addView(image);  

Cependant, je souhaite ajouter ImageView entre les 2 TextViews dans LinearLayout. Je n'arrive pas à trouver un moyen dans la documentation Android d'ajouter une vue avant, ou après. Comment puis-je faire ceci? 

NBJ'appelle 

setContentView(R.layout.main);

Avant J'ajoute ImageView à LinearLayout.

46
Joeblackdev

Lorsque vous ajoutez une View à une ViewGroup, vous pouvez spécifier un index qui définit la position de la vue dans le parent.

Vous avez deux vues et vous souhaitez donc ajouter (en partant de zéro) à la 1ère position; Il suffit d'appeler ll.addView(image, 1); pour le placer entre les deux TextViews.

71
antonyt

La documentation indique que vous pouvez utiliser l'index pour l'insérer où vous voulez. Je vois que vous utilisez uniquement la signature de la vue. Avez-vous essayé la signature avec le paramètre index?

public void addView(View child, int index) 
10
Idistic

J'ai fait face à un problème similaire. Dans mon cas, je voulais ajouter LinearLayout à la dernière position d’un autre LinearLayout. Pour l'accomplir, j'ai fait:

LinearLayout parentLayout = (LinearLayout) findViewById(R.id.parentLayout);
LinearLayout layout = new LinearLayout(this);
layout.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

// add others views to your linear layout

parentLayout.addView(layout, parentLayout.getChildCount());
3
Leonardo Costa
setContentView(R.layout.main);

ImageView img = (ImageView) findViewById(R.id.imagefield);
img.setImageResource(your_image_here);

et dans le xml 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:orientation="vertical"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent"
    Android:weightSum="1"
    Android:id="@+id/llid">

    <TextView Android:text="Client profile"
        Android:id="@+id/ProfileName"
        Android:layout_width="fill_parent"
        Android:textStyle="bold"
        Android:layout_height="wrap_content"
        Android:gravity="center_horizontal">
    </TextView>    

    <ImageView Android:id="@+id/imagefield" 
        Android:layout_width="wrap_content" 
        Android:layout_height="wrap_content">
    </ImageView> 

    <TextView Android:text="Specs"
        Android:id="@+id/Specs"
        Android:layout_width="fill_parent"
        Android:textStyle="bold"
        Android:layout_height="wrap_content"
        Android:gravity="center_horizontal">
    </TextView>

</LinearLayout>
2
user874649

Ajoutez un ImageView au fichier XML et, s'il n'est pas utilisé, rendez-le invisible (image.setVisibility(View.INVISIBLE)). De toute façon, il peut ne rien afficher quand aucune image n’est définie.

1
Jack

Pour obtenir une position de vue dans un groupe de vues

                val targetPosition = oldLL.indexOfChild(viewToAdd)

Pour ajouter une vue à un emplacement dans un groupe de vues

                newLL.addView(viewToAdd,targetPosition)
0
Hitesh Sahu