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
相关产品推荐
相关产品推荐

