将TextView直接放在ImageView下方,占用尽可能多的空间而不进行裁剪

时间:2012-08-22 05:17:13

标签: java android android-layout

我在使这个正常工作方面遇到了很多麻烦。我在ImageView中都有TextViewLinearLayout。我希望ImageView尽可能多地占用父视图而不裁剪或更改宽高比,但为其下面的TextView留下足够的空间。我主要使用它,但是当图像的高度足够小以在父视图中留下额外的空间时,TextView仅出现在LinearLayout的最底部,而不是图像的下方。 / p>

我尝试了很多布局参数组合,摆弄了ImageView和TextView的重力,重量,高度和宽度。我甚至尝试使用RelativeLayout,但结果非常不一致。

以下是我的代码的相关部分:

// Create a vertical linear layout to hold the image with the caption below
// it, taking up as much space on the screen as possible
LinearLayout ll = new LinearLayout(context);
ll.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
ll.setOrientation(LinearLayout.VERTICAL);
ll.setGravity(Gravity.CENTER);

// Get the image view
ImageView img = new ImageView(context);
LayoutParams ilp = new LayoutParams(LayoutParams.MATCH_PARENT, 0);
ilp.weight = 1;
ilp.gravity = Gravity.CENTER;
img.setLayoutParams(ilp);

// Create the caption view
TextView cap = new TextView(context);
cap.setText("Example caption text");
LayoutParams clp = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
clp.weight = 0;
clp.gravity = Gravity.CENTER_HORIZONTAL;
cap.setLayoutParams(clp);

// Add views to the linear layout
ll.addView(img);
ll.addView(cap);

// Load the image using an AsyncTask
loadImageTask = new LoadCachedImageTask(context, img, pos);
loadImageTask.execute("image src");

这是“良好行为”的图像,其中图像被放大到文本仍然可见的位置:

good behaviour

这是“不良行为”的图像,图像上方和下方都有空间,但文字仍然位于底部:

bad behaviour

3 个答案:

答案 0 :(得分:0)

不需要因重力和所有因素而过分捣乱;只需改变

LayoutParams clp = new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);

LayoutParams clp = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.FILL_PARENT);

希望它能解决你的问题:)欢呼:)

答案 1 :(得分:0)

您希望文本视图相对于图像视图,即图像视图下方是小还是大。 RelativeLayout很容易处理这种情况,建议使用RelativeLayout作为容器,即使设备的大小或分辨率发生变化,它也有助于调整视图。 您可以使用此示例代码:

<RelativeLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center" >

    <ImageView
        android:id="@+id/image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/stack" />

    <TextView
        android:id="@+id/text1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/image"
        android:layout_alignLeft="@id/image"
        android:text="This is image"
        android:layout_marginTop="10dp" />
</RelativeLayout>

答案 2 :(得分:0)

为什么不使用drawableTop

TextView属性
 <TextView
      android:layout_height="wrap_content"
      android:layout_width="match_parent"
      android:drawableTop="@drawable/your_drawable"
      .... />

您可以按照您想要的方式设置可绘制填充