it-swarm.com.de

Hinzufügen einer Ansicht zu einem LinearLayout an einer angegebenen Position

Ich habe die folgende main.xml-Datei mit einem 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>

Ich füge dem LinearLayout zur Laufzeit wie gewohnt ein Bild über Code hinzu

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

Ich möchte jedoch die ImageView zwischen den 2 TextViews in meinem LinearLayout hinzufügen. Ich scheine in den Android-Dokumenten keine Möglichkeit zu finden, eine Ansicht vor oder nach einer anderen Ansicht hinzuzufügen. Wie kann ich das machen? 

NBIch rufe an 

setContentView(R.layout.main);

Vorher Ich füge das ImageView zum LinearLayout hinzu.

46
Joeblackdev

Wenn Sie eine View zu einer ViewGroup hinzufügen, können Sie einen Index angeben , der die Position der Ansicht im übergeordneten Element festlegt.

Sie haben zwei Ansichten, und so möchten Sie (ab Null zählen) an der 1. Position hinzufügen. Rufen Sie einfach ll.addView(image, 1); auf, damit es zwischen den beiden TextViews platziert wird.

71
antonyt

Im docs-Status können Sie den Index verwenden, um ihn an der gewünschten Stelle einzufügen. Ich sehe, dass Sie nur die Signatur der Ansicht verwenden. Haben Sie die Signatur mit dem Indexparameter versucht?

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

Ich hatte ein ähnliches Problem. In meinem Fall wollte ich ein LinearLayout an der letzten Position eines anderen LinearLayouts hinzufügen. Um dies zu erreichen, tat ich:

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

und in der 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

Fügen Sie der XML-Datei eine ImageView hinzu. Wenn sie nicht verwendet wird, machen Sie sie unsichtbar (image.setVisibility(View.INVISIBLE)). Es kann sowieso nichts angezeigt werden, wenn kein Bild eingestellt ist.

1
Jack

Ansichtsposition in einer Ansichtsgruppe erhalten

                val targetPosition = oldLL.indexOfChild(viewToAdd)

So fügen Sie eine Ansicht an einer Position in einer Ansichtsgruppe hinzu

                newLL.addView(viewToAdd,targetPosition)
0
Hitesh Sahu