在LTR布局下,layout_marginStart 与 layout_marginLeft 一定可以等价替换吗?

关于layout_marginStart与layout_marginLeft的区别,已经有不少文章详细介绍过了,相信大部分人都接受上文中的说法:

对于LTR(left-to-right,即从左到右),start、end等同于left、right

因此,在日常的Android UI开发中,我们常常会使用
layout_marginStart 替换掉以往在布局文件中声明的 layout_marginLeft,并且Android Studio内置的Lint工具也会以如下的警告来建议我们进行这种替换:

Consider replacing android:layout_marginLeft with android:layout_marginStart="200dp" to better support right-to-left layouts

这种替换真的是等价的吗?这里举出一个我在日常开发中遇到的一个反例


在LTR布局下,layout_marginStart 与 layout_marginLeft 一定可以等价替换吗?_第1张图片
使用layout_marginLeft的情况

将图中Lint的警告的语句,换成 layout_marginStart,效果如下


在LTR布局下,layout_marginStart 与 layout_marginLeft 一定可以等价替换吗?_第2张图片
使用layout_marginStart的情况

对比两种情况下的布局预览,可以发现在这种情况下,即使对于LTR的布局, layout_marginStart 与 layout_marginLeft 并不等价,其原因在于,由于 layout_width 和 layout_marginEnd 的存在,上面设置的 layout_marginLeft 没有生效;而下面设置的 layout_marginStart 则生效并『挤压』了属于 layout_width 的空间。

因此,在布局文件中使用 start、end 来替换 left、right 时,需要仔细检查更改后的布局是否发生变化,避免发生类似的问题。

你可能感兴趣的:(在LTR布局下,layout_marginStart 与 layout_marginLeft 一定可以等价替换吗?)