1

I want to implement an imageview and a textview side by side. I achieved this by using XML. However i wanted to achieve this programmatically but had no luck so far. My XML and Java code are below. Please help me to execute programmatically.

I'm executing the Java code in a fragment.

XML CODE:

<RelativeLayout
       android:id="@+id/rl1"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
    >

    <com.loopj.android.image.SmartImageView
        android:id="@+id/my_image1"
        android:layout_width="160dip" 
        android:layout_height="100dip"
        android:adjustViewBounds="true"  
        android:scaleType="fitXY" 
         />

    <TextView
        android:id="@+id/tv1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/my_image1"
        android:layout_alignTop="@+id/my_image1"
        android:layout_toRightOf="@+id/my_image1"
        android:gravity="center_vertical"
     />
</RelativeLayout>

JAVA CODE:

RelativeLayout rl1 = new RelativeLayout(getActivity());
RelativeLayout.LayoutParams rlParams;
rlParams = new RelativeLayout.LayoutParams(
                 newLayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT));
rlParams.addRule(LinearLayout.VERTICAL);
rl1.setLayoutParams(rlParams);

SmartImageView siv1 = new SmartImageView(getActivity());
siv1.setId(rand.nextInt(50000) + 1);
siv1.setLayoutParams(new LayoutParams(width,height));
siv1.setAdjustViewBounds(true);
siv1.setScaleType(ScaleType.FIT_XY);
siv1.setImageUrl(Uri);

TextView tv1 = new TextView(getActivity());
RelativeLayout.LayoutParams relativeLayoutParams;
relativeLayoutParams = new RelativeLayout.LayoutParams(
                    RelativeLayout.LayoutParams.WRAP_CONTENT,
                    RelativeLayout.LayoutParams.WRAP_CONTENT);
tv1.setLayoutParams(relativeLayoutParams);
relativeLayoutParams.setMargins(10, 0, 0, 0);
tv1.setGravity(Gravity.CENTER_VERTICAL);
tv1.setText("Sample Text");

rl1.addView(siv1);
rl1.addView(tv1);
ll.addView(rl1);

By executing the above code, i'm getting the image but the text is inside the image. But, i want to get the image on the left and the text on the right.

Thanks in advance

4 Answers 4

5

Add below code to your Activity:

rlParams.addRule(RelativeLayout.ALIGN_TOP, siv1);
rlParams.addRule(RelativeLayout.ALIGN_BOTTOM, siv1);
rlParams.addRule(RelativeLayout.RIGHT_OF, siv1);
tv1.setLayoutParams(rlParams);

and then do:

rl1.addView(siv1);
rl1.addView(tv1);

Hope this helps.

Sign up to request clarification or add additional context in comments.

2 Comments

This is a good answer, you are missing rules like in your XML, android:layout_alignBottom="@+id/my_image1" android:layout_alignTop="@+id/my_image1" android:layout_toRightOf="@+id/my_image1", and Gagan told you how to set them.
You are welcome, I like straight questions and answers that goes accordingly, not just some workaround. Workaround is when you are desperate and need something just to work.
2

In your case it is better to use a horizontal LinearLayout:

LinearLayout ll = new LinearLayout(getActivity());
ll.setOrientation(LinearLayout.HORIZONTAL);
LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.MATCH_PARENT,
            LinearLayout.LayoutParams.WRAP_CONTENT);
ll.setLayoutParams(param);

TextView textview = new TextView(getActivity());
...



SmartImageView siv1 = new SmartImageView(getActivity());
...

ll.addView(textview);
ll.addView(siv1);

Comments

2

To align the views in RelativeLayout is much difficult. I will suggest you to use the TableRows or LinearLayouts. Both these give much easier way to align views side by side. Here is a source in which one TextView is aligned-left with 4 ImageViews aligned on its right. You can get idea from this TextView taking/consuming too much space above and below the text

Comments

1

You can set the margin of your text like this

relativeLayoutParams.setMargins(200, 0, 0, 0);

but this is not the best practice so do one thing take linear layout set orientation to horizontal add both imageview and textview to it and then add this linearlayout to your relative layout. Hope this helps.

2 Comments

@Lalith Mohan This is going to work too. It is a big difference if something worked and something worked your way. This is you avoiding the issue, question whether your way is proper is more of a design question, answers that are leading you to a different way sometimes can interfere with your concept. Next time if you want something just to work define that when you ask the question.
Thanks Marko. I appreciate your concern

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.