Добавление вида в LinearLayout в указанной позиции - PullRequest
49 голосов
/ 02 августа 2011

У меня есть следующий файл main.xml с 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>

Я добавляю изображение в LinearLayout с помощью кода во время выполнения, например

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

Однако я хочу добавить ImageView между двумя TextViews в моем LinearLayout. Я не могу найти способ в документах Android, чтобы добавить представление перед другим видом или после. Как я могу это сделать?

NB Я звоню

setContentView(R.layout.main);

До Я добавляю ImageView к LinearLayout.

Ответы [ 6 ]

77 голосов
/ 02 августа 2011

При добавлении View к ViewGroup вы можете указать индекс , который устанавливает позицию представления в родительском элементе.

У вас есть два вида, и поэтому (считая с нуля) вы хотели бы добавить на 1-й позиции; просто позвоните ll.addView(image, 1);, чтобы поместить его между двумя TextViews.

10 голосов
/ 02 августа 2011

В документе указано, что вы можете использовать индекс, чтобы вставить его в нужное место. Я вижу, вы используете только подпись представления, пробовали ли вы подпись с параметром index?

public void addView(View child, int index) 
3 голосов
/ 14 октября 2016

Я столкнулся с подобной проблемой.В моем случае я хотел добавить LinearLayout в последнюю позицию другого LinearLayout.Для этого я сделал:

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());
2 голосов
/ 02 августа 2011
setContentView(R.layout.main);

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

и в 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>
1 голос
/ 02 августа 2011

Добавьте ImageView в xml и, если он не используется, сделайте его невидимым (image.setVisibility(View.INVISIBLE)). В любом случае он может ничего не показывать, если изображение не установлено.

0 голосов
/ 04 февраля 2019

Чтобы получить позицию представления в группе представлений

                val targetPosition = oldLL.indexOfChild(viewToAdd)

Чтобы добавить вид в позицию в группе видов

                newLL.addView(viewToAdd,targetPosition)
...