在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

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


使用layout_marginLeft的情况

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


使用layout_marginStart的情况

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。