Adding a view to a LinearLayout at a specified position

AndroidAndroid Linearlayout

Android Problem Overview


I have the following main.xml file with a 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>

I add an image to the LinearLayout via code at runtime like so

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

However, I want to add the ImageView between the 2 TextViews in my LinearLayout. I can't seem to find a way in the android docs to add a view before another view, or after. How can I do this?

NB I call

setContentView(R.layout.main);

Before I add the ImageView to the LinearLayout.

Android Solutions


Solution 1 - Android

When adding a View to a ViewGroup, you can specify an index which sets the position of the view in the parent.

You have two views and so (counting from zero) you would want to add at the 1st position; just call ll.addView(image, 1); to have it placed in between the two TextViews.

Solution 2 - Android

The docs state you can use the index to insert it where you want. I see you are using the signature of the view only, did you try the signature with the index parameter?

public void addView(View child, int index) 

Solution 3 - Android

I faced a similar problem. In my case I wanted to add a LinearLayout at last position of another LinearLayout. To accomplish it, I did:

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

Solution 4 - Android

setContentView(R.layout.main);

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

and in the 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>

Solution 5 - Android

Add an ImageView into the xml, and if its not being used, make it invisible (image.setVisibility(View.INVISIBLE)). It may not show anything anyway when no image is set.

Solution 6 - Android

To get position of view in a view group

                val targetPosition = oldLL.indexOfChild(viewToAdd)

To add a view at a position in a view group

                newLL.addView(viewToAdd,targetPosition)

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJoeblackdevView Question on Stackoverflow
Solution 1 - AndroidantonytView Answer on Stackoverflow
Solution 2 - AndroidIdisticView Answer on Stackoverflow
Solution 3 - AndroidLeonardo CostaView Answer on Stackoverflow
Solution 4 - Androiduser874649View Answer on Stackoverflow
Solution 5 - AndroidJackView Answer on Stackoverflow
Solution 6 - AndroidHitesh SahuView Answer on Stackoverflow