How to add a subview to an ImageView in Android

wiseindy picture wiseindy · Oct 28, 2013 · Viewed 13k times · Source

I come from an iOS background. For some reason, I cannot figure out how to add a view to another view.

I have two ImageViews that I am creating programatically as follows:

ImageView imageView;
ImageView imageHolder;

Now, I want to do something like this:

imageHolder.addView(imageView);

How do I accomplish this? Did a lot of Googling but no use.

Answer

Adam S picture Adam S · Oct 28, 2013

As pskink said, you can only add views programatically to something that is a ViewGroup. You can add to a LinearLayout, for example:

LinearLayout layout = (LinearLayout)findViewById(R.id.linear_layout);
layout.addView(new EditText(context));

That probably won't help your scenario, though. To place an image on top of another you could use a Relative Layout. You'd typically set this up in the XML layout file:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ImageView
        android:id="@+id/backgroundImage"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <ImageView
        android:id="@+id/foregroundImage"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@id/backgroundImage"
        android:layout_alignLeft="@id/backgroundImage" />

</RelativeLayout>

Then you can specify the images in code if you don't know what they're going to be beforehand:

((ImageView)findViewById(R.id.backgroundImage)).setImageResource(R.drawable.someBackgroundImage);