我正在尝试将EditText
与左侧的ImageView
放在一行中。但我无法正确缩放图像以匹配文本输入的高度。
布局很简单:
<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>
(我用红色突出显示图像背景以查看ImageView分配的实际空间)
如果我指定ImageView
的确切高度:
android:layout_height="48dp"
然后我得到了我最需要的观点:
但我不知道EditText
的确切高度,因此我无法在ImageView
指定它。
指定ImageView
的高度以填充其父级(以匹配``EditText`高度):
android:layout_height="fill_parent"
然后我在图像和文本输入之间得到意想不到的额外余量:
实际上,在这种情况下,ImageView
宽度等于未缩放图像宽度,而图像则缩放。
如果我将layout_height
指定为48dp
并将adjustViewBounds
设置为false
,则与下面显示的图片类似:
android:layout_height="48dp"
android:adjustViewBounds="false"
所以,这里的问题是:如何正确定义布局以缩放图像以匹配编辑条目高度,同时将ImageView
的宽度缩小到缩放图像宽度?换句话说,如何摆脱这个额外的空间?
答案 0 :(得分:7)
这是一个LinearLayout错误。如果您查看来源here中的forceUniformHeight
。你可以看到,当LinearLayout设置为match_parent
时,要处理提供wrap_content
作为高度的子视图的大小,LinearLayout假装具有绝对高度,重新计算子高度,然后重用子宽度从上一次测量通过。基本上你的图像计算高度和宽度不受约束,并获得默认的宽度和高度,然后重新计算高度,但被迫使用旧的宽度。您需要提供一个高度或覆盖一些视图onMeasures
答案 1 :(得分:0)
你也可以将重力置于线性布局的中心
注意:你应该在drawables-hdpi / ldpi和mdpi中有不同的图像