如何使ImageView宽度与缩放图像内容宽度匹配

时间:2018-01-18 09:13:31

标签: android android-layout android-imageview

我想知道,我如何制作我的ImageView宽度,匹配缩放的图像内容宽度。

我正在wrap_content使用ImageView

如果图像内容很小,则效果非常好。

但是,对于大型肖像或大型风景图像,它效果不佳。

这是我的结果。

intellij-community

第一排是我希望实现的。它使用的是一个小图像。

  • 使用wrap_content尊重图片内容宽度。
  • 使用TextView
  • 尊重左match_parent s'高度

然而,当来到第2行和第3行时,它不是我所期望的。

第2行正在使用大型人像。第3行正在使用大型风景图像。

  • 不尊重图片内容宽度。
  • 图像内容不正确。

对于ImageView,我使用以下XML

<ImageView
    android:background="#ff0000"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:src="@drawable/landscape" />

这是我的完整布局XML

<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/about_card_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginBottom="8dp"
    android:layout_marginLeft="8dp"
    android:layout_marginRight="8dp"
    android:layout_marginTop="8dp"
    app:cardElevation="2dp"
    app:cardCornerRadius="2dp"
    app:cardPreventCornerOverlap="false"
    android:foreground="?attr/selectableItemBackground"
    android:clickable="false" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_marginBottom="20dp">
            <LinearLayout
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="wrap_content"
                android:orientation="vertical">
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textColor="?attr/secondaryTextColor"
                    android:text="CEO"
                    android:textSize="12sp"
                    android:layout_marginTop="@dimen/space_among_cards"
                    android:layout_marginBottom="6dp" />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textColor="?attr/primaryTextColor"
                    android:text="Mark_Zuckerberg"
                    android:textSize="16sp" />
            </LinearLayout>

            <ImageView
                android:background="#ff0000"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:src="@drawable/ic_refresh_black_18dp" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_marginBottom="20dp">
            <LinearLayout
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="wrap_content"
                android:orientation="vertical">
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textColor="?attr/secondaryTextColor"
                    android:text="CEO"
                    android:textSize="12sp"
                    android:layout_marginTop="@dimen/space_among_cards"
                    android:layout_marginBottom="6dp" />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textColor="?attr/primaryTextColor"
                    android:text="Mark_Zuckerberg"
                    android:textSize="16sp" />
            </LinearLayout>

            <ImageView
                android:background="#ff0000"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:src="@drawable/portrait" />
        </LinearLayout>


        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
            <LinearLayout
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="wrap_content"
                android:orientation="vertical">
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textColor="?attr/secondaryTextColor"
                    android:text="CEO"
                    android:textSize="12sp"
                    android:layout_marginTop="@dimen/space_among_cards"
                    android:layout_marginBottom="6dp" />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textColor="?attr/primaryTextColor"
                    android:text="Mark_Zuckerberg"
                    android:textSize="16sp" />
            </LinearLayout>

            <ImageView
                android:background="#ff0000"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:src="@drawable/landscape" />
        </LinearLayout>

    </LinearLayout>
</android.support.v7.widget.CardView>

这是我正在使用的图像

  1. enter image description here
  2. Small image
  3. Large portrait image
  4. 在使用大图片时,任何想法如何使ImageView表现如下?

    1. 尊重缩放图像内容宽度
    2. 最适合制作图片内容
    3. 更新

      我曾尝试使用android:adjustViewBounds="true"。然而,它会变得最糟糕,因为你可以看到大型肖像图像正在向左推动它TextView

      Large landscape image

3 个答案:

答案 0 :(得分:0)

尝试使用

adjustViewBounds="true"

在ImageView上(参见documentation),确保视图仅使用必要的宽度。

答案 1 :(得分:0)

Result is

试试这个:

<ImageView
      android:layout_width="0dp"
      android:layout_weight="1"
      android:layout_height="match_parent"
      android:background="#ff0000"
      android:scaleType="fitEnd"
      android:src="@drawable/portrait" />

答案 2 :(得分:0)

  

我已将weightSum添加到根布局并为孩子增加了重量   布局。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                                    xmlns:app="http://schemas.android.com/apk/res-auto"
                                    android:id="@+id/about_card_view"
                                    android:layout_width="match_parent"
                                    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_marginBottom="20dp"
            android:weightSum="100">
            <LinearLayout
                android:layout_width="0dp"
                android:layout_weight="40"
                android:layout_height="wrap_content"
                android:orientation="vertical">
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textColor="#02B8B9"
                    android:text="CEO"
                    android:textSize="12sp"
                    android:layout_marginTop="10dp"
                    android:layout_marginBottom="6dp" />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textColor="#02B8B9"
                    android:text="Mark_Zuckerberg"
                    android:textSize="16sp" />
            </LinearLayout>

            <ImageView
                android:background="#ff0000"
                android:layout_width="0dp"
                android:layout_weight="60"
                android:layout_height="wrap_content"
                android:src="@drawable/mic_pic" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:layout_marginBottom="20dp"
            android:weightSum="100">
            <LinearLayout
                android:layout_width="0dp"
                android:layout_weight="40"
                android:layout_height="wrap_content"
                android:orientation="vertical">
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textColor="#02B8B9"
                    android:text="CEO"
                    android:textSize="12sp"
                    android:layout_marginTop="10dp"
                    android:layout_marginBottom="6dp" />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textColor="#02B8B9"
                    android:text="Mark_Zuckerberg"
                    android:textSize="16sp" />
            </LinearLayout>

            <ImageView
                android:background="#ff0000"
                android:layout_width="0dp"
                android:layout_weight="60"
                android:layout_height="wrap_content"
                android:src="@drawable/images1" />
        </LinearLayout>


        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:weightSum="100">
            <LinearLayout
                android:layout_width="0dp"
                android:layout_weight="40"
                android:layout_height="wrap_content"
                android:orientation="vertical">
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textColor="#02B8B9"
                    android:text="CEO"
                    android:textSize="12sp"
                    android:layout_marginTop="10dp"
                    android:layout_marginBottom="6dp" />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:textColor="#02B8B9"
                    android:text="Mark_Zuckerberg"
                    android:textSize="16sp" />
            </LinearLayout>

            <ImageView
                android:background="#ff0000"
                android:layout_width="0dp"
                android:layout_weight="60"
                android:layout_height="wrap_content"
                android:src="@drawable/test_image" />
        </LinearLayout>

    </LinearLayout>
</LinearLayout>