web-dev-qa-db-ja.com

指定された位置でLinearLayoutにビューを追加する

LinearLayoutを持つ次のmain.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>    
    <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);  

ただし、LinearLayoutの2つのTextViewの間にImageViewを追加します。 Androidドキュメントで別のビューの前または後にビューを追加する方法を見つけることができないようです。これを行うにはどうすればよいですか?

[〜#〜] nb [〜#〜]呼び出します

setContentView(R.layout.main);

ImageViewをLinearLayoutに追加します。

49
Joeblackdev

ViewViewGroupに追加するとき、 インデックスを指定 で親のビューの位置を設定できます。

ビューが2つあるため、(ゼロからカウントして)1番目の位置に追加します。 ll.addView(image, 1);を呼び出して、2つのTextViewsの間に配置します。

78
antonyt

ドキュメントには、インデックスを使用して必要な場所に挿入できると記載されています。ビューの署名のみを使用しているようですが、indexパラメーターを使用して署名を試しましたか?

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

同様の問題に直面しました。私の場合、別の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());
3
Leonardo Costa
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>
2
user874649

ImageViewをxmlに追加し、使用されていない場合は非表示にします(image.setVisibility(View.INVISIBLE))。画像が設定されていない場合、とにかく何も表示されない場合があります。

1
Jack

ビューグループ内のビューの位置を取得するには

                val targetPosition = oldLL.indexOfChild(viewToAdd)

ビューグループ内の位置にビューを追加するには

                newLL.addView(viewToAdd,targetPosition)
0
Hitesh Sahu