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