ImageView:adjustViewBounds不能与layout_height ="fill_parent"一起使用?

GrA*_*And 15 android scale imageview

我试图EditTextImageView左边的单排放置.但我无法正确缩放图像以匹配文本输入的高度.

布局很简单:

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
        <ImageView
            android:id="@+id/icon"
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:adjustViewBounds="true"
            android:scaleType="fitStart"
            android:background="#f00"
            android:src="@drawable/icon" />
        <EditText
            android:id="@+id/text"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" />
    </LinearLayout>
Run Code Online (Sandbox Code Playgroud)

(我用红色突出显示图像背景,以查看ImageView分配的实际空间)


如果我指定的确切高度ImageView:

            android:layout_height="48dp"
Run Code Online (Sandbox Code Playgroud)

然后我得到了我最需要的观点: 在此输入图像描述

但我不知道确切的高度EditText,所以我不能在ImageView这里指定它.


ImageView指定高度为填充其父级时(以匹配``EditText`高度):

            android:layout_height="fill_parent"
Run Code Online (Sandbox Code Playgroud)

然后我在图像和文本输入之间得到意想不到的额外余量: 在此输入图像描述

实际上,在这种情况下,ImageView宽度等于未缩放的图像宽度,而图像被缩放.


这是类似以下图所示,如果我指定layout_height48dp并设置adjustViewBoundsfalse:

            android:layout_height="48dp"
            android:adjustViewBounds="false"
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


因此,这里的问题是:如何正确定义布局以缩放图像以匹配编辑条目高度,同时将宽度ImageView缩小到缩放图像宽度?换句话说,如何摆脱这个额外的空间?

jqp*_*liq 7

这是一个LinearLayout错误.如果你在这里查看forceUniformHeight来源.您可以看到,为了处理当LinearLayout设置为高度时提供的大小子视图,LinearLayout假装具有绝对高度,重新计算子高度,然后重用上一个度量过程中的子宽度.基本上你的图像计算高度和宽度不受约束,并获得默认的宽度和高度,然后重新计算高度,但被迫使用旧的宽度.您需要提供高度或覆盖一些视图match_parentwrap_contentonMeasures


Luk*_*kap 0

您还可以将重力置于线性布局的中心

注意:drawables-hdpi/ldpi 和 mdpi 中还应该有不同的图像