【Android】解决在RelativeLayout中使用ImageView, adjustViewBounds 无效

今天在布局时使用ImageView, 想要的效果是高度一定, 宽度随着高度的变化自动变化,保证ImageView和图片的宽高比一致,于是自然想到了adjustViewBounds属性。结果使用出来,没有达到想要的显示效果。经过验证, 发现是因为ImageView直接被RelativeLayout包裹的缘故。
几次验证的现象分别如下。

在RelativeLayout中

  1. layout_height设定一个定值如100dp, layout_width设为wrap_content, adjustViewBounds设为true, 无效,无论高度如何调整,宽度依然保持不变,为wrap_content
  2. 反过来,layout_width设定定值,layout_height设为wrap_content, 则设置adjustViewBounds为true,生效,高度会随宽度变化。

在LinearLayout中

无论是定高, 然后宽度wrap_content, 或者是反过来, 全部生效。

解决办法

在RelativeLayout中使用ImageView, 若要adjustViewBounds生效,可以在ImageView外面包裹一层LinearLayout。

说明(关于maxWidth, maxHeight)

  1. 以上的验证中,无论adjustViewBounds生效还是未生效, 都没有设置maxHeight或者maxWidth,这与网上普遍流传的 adjustViewBounds 必须和maxWidth或者maxHeight配合使用 才能生效的结论不符。
  2. 而且maxHeight或者maxWidth有其自己的含义,随便拿来用,只怕与本来的设计思路不符。
  3. 同时, 我在Android官方文档中也没有看到 必须使用maxWidth or minHeight的说法。
    资料来源:https://developer.android.com/reference/android/widget/ImageView.html#attr_android:adjustViewBounds
    (since Level 1)
    【Android】解决在RelativeLayout中使用ImageView, adjustViewBounds 无效_第1张图片

求教

为什么出现这种情况,我现在没有明确的答案, 如果你知道, 或者有自己的见解, 希望不吝赐教。谢谢~

你可能感兴趣的:(Android)