Android XML中marginStart与marginLeft、marginEnd与marginRight有什么区别?
Android marginStart/marginEnd 与 marginLeft/marginRight 区别及适用场景
核心差异
两类属性的本质区别是对*布局方向(Layout Direction)*的适配能力不同:
marginLeft/marginRight属于绝对方向属性,和系统语言、布局规则无关,永远对应屏幕物理左侧/右侧的边距marginStart/marginEnd属于相对方向属性,会跟随系统布局方向自动适配对齐逻辑:- LTR(从左到右)布局场景下(中文、英文等绝大多数语言的默认布局规则),
marginStart等效于marginLeft,marginEnd等效于marginRight - RTL(从右到左)布局场景下(阿拉伯语、希伯来语等语言的默认布局规则),
marginStart等效于marginRight,marginEnd等效于marginLeft
- LTR(从左到右)布局场景下(中文、英文等绝大多数语言的默认布局规则),
示例代码:
<!-- LTR布局下:文本左侧留16dp边距,右侧留8dp边距 --> <!-- RTL布局下:自动适配为文本右侧留16dp边距,左侧留8dp边距,符合对应语言的阅读习惯 --> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="示例文本" android:layout_marginStart="16dp" android:layout_marginEnd="8dp"/>
适用场景
- 优先使用
marginStart/marginEnd的场景:- 应用需要做国际化适配,尤其是要支持阿拉伯语、希伯来语等RTL语言的场景
- 符合Android官方布局开发规范,新版本Android系统的原生组件均会优先响应相对方向属性
- 可使用
marginLeft/marginRight的场景:- 应用明确不做RTL适配,仅面向LTR语言用户发布
- 有特殊UI要求,无论布局方向如何变化,边距都需要固定在屏幕物理某一侧(比如固定贴在屏幕左边缘的悬浮入口,可直接声明
marginLeft)
注意事项
Android 4.2(API 17)版本才开始支持RTL布局和
marginStart/marginEnd属性,如果你需要兼容Android 4.2以下的系统版本,建议同时声明对应的相对方向属性和绝对方向属性,保证全版本展示正常。
内容的提问来源于stack exchange,提问作者oyeraghib
相关产品推荐
相关产品推荐

