我有一排View
正在使用的ListView
.
这RowView
由水平方向ImageView
的左侧和TextView
右侧组成,LinearLayout
其中图像占 40% 的空间,文本占剩余的 60%。
我希望布局以ImageView
以下方式处理图像的大小调整:
- 水平拉伸图像,使其填充给定 40%
LinearLayout
- 垂直调整大小
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
来完成工作?