如何在Android中设置ImageView的最小和最大大小

如何在Android中设置ImageView的最小和最大大小,android,android-layout,android-imageview,Android,Android Layout,Android Imageview,我想为ImageView指定最小宽度/高度和最大宽度/高度。图像应缩放以适合 这样做: <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:minWidth="100dp" android:maxWidth="200dp" android:minHeight="100dp" android:maxHeight="

我想为ImageView指定最小宽度/高度和最大宽度/高度。图像应缩放以适合

这样做:

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:minWidth="100dp"
    android:maxWidth="200dp"
    android:minHeight="100dp"
    android:maxHeight="200dp"
    android:src="@drawable/ic_launcher" />

最小宽度和高度按其应执行,但忽略最大宽度和高度

如果我设置android:adjustViewBounds=“true”:


然后,最大宽度和高度按其应有的方式执行,但忽略最小宽度和高度


有没有一种方法可以同时实现这两种功能?

最后,我创建了自己的视图,该视图扩展了ImageView并覆盖了onMeasure()

此视图现在可以像这样使用:

<my.package.ResizingImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:minWidth="100dp"
    android:maxWidth="200dp"
    android:minHeight="100dp"
    android:maxHeight="200dp"
    android:src="@drawable/ic_launcher" />

这是我想要的,但难道没有更简单的解决方案吗?


        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:minWidth="150dp"
            android:minHeight="150dp"
            >

            <RelativeLayout
                android:id="@+id/imageLayout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="@color/white"
                android:layout_gravity="center_vertical"
                >

                <ImageView
                    android:id="@+id/image"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:adjustViewBounds="true"
                    android:src="@drawable/trump"

                    />

                <ProgressBar
                    android:id="@+id/progressBar"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_centerInParent="true"
                    android:visibility="gone" />
            </RelativeLayout>
        </LinearLayout>

请参见在Imageview中为容器布局指定最小高度和宽度并放置adjustViewBounds。这样,您的任务将在简单的步骤中完成。

过去仅使用XML几乎不可能做到这一点,但现在使用
ConstraintLayout
,它非常简单

<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintWidth_min="100dp"
        app:layout_constraintWidth_max="200dp"
        app:layout_constraintHeight_min="100dp"
        app:layout_constraintHeight_max="200dp"
        app:layout_constrainedWidth="true"
        app:layout_constrainedHeight="true"
        android:scaleType="centerCrop" />
</androidx.constraintlayout.widget.ConstraintLayout>


您可以使用
fitXY
centerCrop
scaleType
;其他人不会强制图像符合
ImageView

您是对的。我厌倦了不能用Android做简单的事情。
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:minWidth="150dp"
            android:minHeight="150dp"
            >

            <RelativeLayout
                android:id="@+id/imageLayout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="@color/white"
                android:layout_gravity="center_vertical"
                >

                <ImageView
                    android:id="@+id/image"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:adjustViewBounds="true"
                    android:src="@drawable/trump"

                    />

                <ProgressBar
                    android:id="@+id/progressBar"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_centerInParent="true"
                    android:visibility="gone" />
            </RelativeLayout>
        </LinearLayout>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintWidth_min="100dp"
        app:layout_constraintWidth_max="200dp"
        app:layout_constraintHeight_min="100dp"
        app:layout_constraintHeight_max="200dp"
        app:layout_constrainedWidth="true"
        app:layout_constrainedHeight="true"
        android:scaleType="centerCrop" />
</androidx.constraintlayout.widget.ConstraintLayout>