Android - 以编程方式实现视图

时间:2013-05-20 07:00:58

标签: android android-layout

我想并排实现imageview和textview。我通过使用XML实现了这一点。但是我想以编程方式实现这一目标但到目前为止没有运气。我的XML和Java代码如下。请帮我以编程方式执行。

我正在片段中执行Java代码。

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

通过执行上面的代码,我得到图像,但文本在图像内。但是,我想得到左边的图像和右边的文字。

提前致谢

4 个答案:

答案 0 :(得分:5)

将以下代码添加到您的活动中:

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

然后执行:

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

希望这有帮助。

答案 1 :(得分:2)

在您的情况下,最好使用水平 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);

答案 2 :(得分:2)

在RelativeLayout中对齐视图非常困难。我建议你使用TableRows或LinearLayouts。这两种方法都可以更方便地并排查看视图。这是一个源,其中一个TextView对齐 - 左侧有4个ImageViews在其右侧对齐。你可以从中得到想法 TextView taking/consuming too much space above and below the text

答案 3 :(得分:1)

您可以像这样设置文字的边距

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

但这不是最佳做法所以做一件事就是将线性布局设置方向设置为水平将imageview和textview添加到它,然后将此linearlayout添加到您的亲戚布局。 希望这会有所帮助。