You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio如何仅修改ImageView宽度同时维持图片宽高比

问题原因

你当前的操作没有生效,是因为ImageView默认关闭了adjustViewBounds属性,该属性的作用是允许控件根据加载Drawable的原始宽高比,在确定单侧尺寸时自动计算另一侧尺寸。

解决方案

方案1:修改XML+代码调整

首先在ImageView的XML定义中添加android:adjustViewBounds="true"属性,修改后配置如下:

<ImageView
    android:id="@+id/add_image_signup"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@id/other_text"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="20dp"
    android:adjustViewBounds="true"
    app:srcCompat="@drawable/add_button" />

之后代码中仅需指定宽度即可,高度会自动适配原始图片比例:

val displayMetrics = DisplayMetrics()
windowManager.defaultDisplay.getMetrics(displayMetrics)
val width = displayMetrics.widthPixels

val addImage = findViewById<ImageView>(R.id.add_image_signup)
val layoutParams = addImage.layoutParams
// 注意LayoutParams接收像素单位的Int值,需对计算结果做类型转换
layoutParams.width = (width * 0.3).toInt()
addImage.layoutParams = layoutParams

方案2:纯代码动态适配

如果你不想修改XML布局,也可以直接在代码中动态开启adjustViewBounds:

val displayMetrics = DisplayMetrics()
windowManager.defaultDisplay.getMetrics(displayMetrics)
val width = displayMetrics.widthPixels

val addImage = findViewById<ImageView>(R.id.add_image_signup)
// 动态开启宽高比适配
addImage.adjustViewBounds = true
val layoutParams = addImage.layoutParams
layoutParams.width = (width * 0.3).toInt()
addImage.layoutParams = layoutParams

补充说明

开启adjustViewBounds后如果后续更换ImageView加载的Drawable,高度会自动适配新图片的宽高比,无需额外修改代码。如果需要调整图片的缩放规则,可以搭配android:scaleType属性使用,默认fitCenter即可满足大多数不裁剪、保持比例的需求。

内容的提问来源于stack exchange,提问作者Evan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 10:00:04