我在View
中使用了一行ListView
。
此RowView
由水平ImageView
的左侧TextView
和右侧的LinearLayout
组成,其中图像被赋予40%的空间,文本被赋予60%的空间。
我希望布局以以下方式处理ImageView
中图像的大小调整:
LinearLayout
的40%范围内填充ImageView
的大小以保持原始纵横比这是我的布局方法:
protected class RowView extends LinearLayout {
public ImageView iv = null;
public TextView tv = null;
private LinearLayout.LayoutParams ivlp = null;
private LinearLayout.LayoutParams tvlp = null;
public RowView(Context ct) {
super(ct);
setOrientation(LinearLayout.HORIZONTAL);
// Create the views
iv = new ImageView(ct);
ivlp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, 0.4f);
iv.setLayoutParams(ivlp);
iv.setAdjustViewBounds(true);
iv.setScaleType(ScaleType.FIT_XY);
tv = new TextView(ct);
tvlp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, 0.4f);
tv.setLayoutParams(tvlp);
tv.setGravity(Gravity.CENTER_VERTICAL | Gravity.RIGHT);
// Add the views
addView(iv);
addView(tv);
}
}
我得到的结果是这样的:
据我了解:
MATCH_PARENT
正确地迫使图像水平拉伸以填充40%的空间ImageView.setAdjustViewBounds(true)
应该允许我需要的任何大小的ImageView
调整。问题是ImageView.ScaleType
似乎都不做我想要的ImageView.ScaleType(ScaleType.FIT_XY)
不是我想要的,因为它不保持纵横比。但是所有其他这样做的人似乎并没有扩大ImageView
的高度(这使得ImageView.setAdjustViewBounds(true)
几乎没有用)。 我究竟做错了什么?这种简单的事情可能如此困难似乎是错误的?
还是我实际上必须努力扩展
ImageView
和覆盖onMeasure
以强制调整大小和宽高比?还是用
Matrix
巧妙地完成了工作? 最佳答案
我相信这是您要寻找的:
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/myImage"
android:scaleType="fitCenter"
android:adjustViewBounds="true" />