我在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" />
    

    09-04 23:26
    查看更多