LinearLayout ImageView 调整所有图像宽度以适合

Posted

技术标签:

【中文标题】LinearLayout ImageView 调整所有图像宽度以适合【英文标题】:LinearLayout ImageView Resize All Image Widths To Fit 【发布时间】:2013-02-17 19:08:54 【问题描述】:

我有一个包含 3 个图像视图的水平线性布局。每个图像视图都包含相同的图像,即 200x200 像素。这是我的布局 xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_
    android:layout_
    tools:context=".MainActivity" >

    <LinearLayout
        android:layout_
        android:layout_
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true" >

        <ImageView
            android:id="@+id/imageView1"
            android:layout_
            android:layout_
            android:src="@drawable/image200" />

        <ImageView
            android:id="@+id/imageView2"
            android:layout_
            android:layout_
            android:src="@drawable/image200" />

        <ImageView
            android:id="@+id/imageView3"
            android:layout_
            android:layout_
            android:src="@drawable/image200" />

    </LinearLayout>

</RelativeLayout>

这是它的样子:

注意我假设从左边数第三张图片的大小是如何调整的,因为没有足够的空间来容纳 3x 200 像素宽的图片。

我宁愿做的不是只缩小最后一张图片,而是均匀调整所有三张图片的大小,以便它们都适合整个屏幕。如何设置布局以均匀地适合所有三个图像?

谢谢

更新 - 更改我的设置后,这里的情况如下:

请注意,图像视图周围的 边框 仍然是 200 像素高。为什么会这样?

【问题讨论】:

【参考方案1】:

将图像视图的宽度和高度设置为match_parent,并为所有图像视图设置 layout_weight=1。同时设置属性android:scaleType="fitXY"

【讨论】:

android:scaleType="fitXY" 没用,因为 layoutHeight 处于包装内容模式 它像我上面所说的那样工作,但问题是它是缩放图像的宽度而不是高度,从而使图像纵横比变得一团糟。删除 fitXY 会导致它调整两个维度的大小。谢谢! @JanTacci 我想你也想拉伸你的图像高度,所以我建议使用 scaleType 我也想拉伸高度(以保持纵横比),但 fitXY 似乎不起作用。当我删除 fitXY 但保留了您的其余建议时,它起作用了 我已经更新了我的原始帖子,并附上了应用建议后的截图。但是请注意,即使图像已经缩小,实际布局高度仍然是 200 像素。为什么会这样?【参考方案2】:

这对我来说非常有效:

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" android:layout_
    android:layout_>

    <ImageView
        android:adjustViewBounds="true"
        android:layout_
        android:layout_
        android:layout_weight="1"/>

    <ImageView
        android:adjustViewBounds="true"
        android:layout_
        android:layout_
        android:layout_weight="1"/>

    <ImageView
        android:adjustViewBounds="true"
        android:layout_
        android:layout_
        android:layout_weight="1"/>

</LinearLayout>

当设置为 0dp 时,布局宽度就是画面中的布局宽度。此处 LinearLayout 的布局宽度与父级匹配。所以它会占用整个宽度,并且根据图像的布局宽度,它们会按照重量的比例占用空间。

【讨论】:

请解释一下你的答案! @Mazz:添加了一个简短的解释。如果还有什么令人困惑的地方,请告诉我。【参考方案3】:

@JanTacci 关于您的后续问题“但是请注意,即使图像已缩小,实际布局高度仍为 200 像素。为什么会发生这种情况?”

我刚刚遇到了同样的问题,并通过将这个属性添加到每个 ImageView 来修复它:

android:adjustViewBounds="true"

【讨论】:

【参考方案4】:

让你的三张图片宽度为 0dp

并为它们添加 1 的 layout_weight

;)

<ImageView
            android:id="@+id/imageView1"
            android:layout_
            android:layout_
            android:layout_weight="1"
            android:src="@drawable/image200" />

【讨论】:

以上是关于LinearLayout ImageView 调整所有图像宽度以适合的主要内容,如果未能解决你的问题,请参考以下文章

调整 ImageView 的大小以使整个布局填满屏幕

在 Android 上使用 scaletype centerCrop 时如何调整 ImageView 的裁剪量?

动态的添加ImageView到LinearLayout中并居中显示

如何在 LinearLayout 中删除 ImageView

默认情况下,LinearLayout 内的 ImageView 在侧面有边距

错误:android.widget.LinearLayout 无法转换为 android.widget.ImageView