相对布局 alignParentLeft 与 alignParentStart

Relative Layout alignParentLeft vs alignParentStart

所以我很习惯使用相对布局,但是在习惯 Android Studio 的同时,我注意到在我的相对布局子视图中它生成了以下两个。

android:layout_alignParentLeft="true"
android:layout_alignParentStart="true

我查看了 Android 文档 here,但看不出两者之间的区别。当然,在 Android Studio 中将一个换成另一个没有明显的区别。有吗?

这取决于布局方向。布局方向可以是从左到右(开始 = 左,结束 = 右),也可以是从右到左(反之亦然)。

默认情况下,布局方向基于区域设置(英语等语言从左到右,阿拉伯语等语言从右到左),但您可以使用 layoutDirection XML attribute or setLayoutDirection 覆盖它功能。例如:

android:layoutDirection="ltr"   

^ 将使 alignParentStart 等同于所有设备上的 alignParentLeft。

android:layoutDirection="rtl"   

^ 将使 alignParentStart 等同于所有设备上的 alignParentRight。您还可以设置 "locale" 以使用语言环境或设置 "inherit" 从父视图继承布局方向。

您需要将 android:supportsRtl="true" 添加到 AndroidManifest.xml 以支持从右到左的布局。

还相关:android:textDirection

这些 "xxxStart"、"xxxEnd" 属性是为了在某些语言环境中支持 RTL(从右到左)布局。 如

android:paddingStart
android:paddingEnd
android:layout_marginStart
android:layout_marginEnd
...

你可以看到more here关于它。

在正常(从左到右)布局中,"xxxStart" 表示 "xxxLeft","xxxEnd" 表示 "xxxRight"。但在从右到左布局中,"xxxStart"表示 "xxxRight" 和 "xxxEnd" 表示 "xxxLeft".

但 RTL 仅在 sdk 17 及更高版本上受支持。

要支持较低的 sdk,您可以使用 "android:layout_marginStart" 和 "android:layout_marginLeft"。在较低的 sdk 设备上,将使用 "android:layout_marginLeft"。

android:layout_alignParentStart="true"

this 视图的 start 边与其父视图的 start 边对齐。这是 LTR(从左到右)语言环境的 left 边缘和阿拉伯语、希伯来语等 RTL(从右到左)语言环境的 right 边缘, 波斯语等

原因Android工作室还补充

android:layout_alignParentLeft="true"

您的观点是支持 4.2.x Jelly Bean 之前的旧平台。 Start/End 属性如 layout_alignParentStart 仅在 API 17 之后可用。只有在找不到相应的 Start/End 属性时,较新的平台才会回退到 Left/Right 属性。

如果您的应用程序支持使用低于级别 17android:minSdkVersion 旧版平台,您必须始终为您的视图提供 Left/Right 属性。否则项目将不会编译并显示

之类的错误消息

To support older versions than API 17 (project specifies 7) you should also add android:layout_alignParentLeft="true"

另请注意,您的 Android 应用程序也需要在 AndroidManifest.xml 中声明其对 RTL 语言环境的支持。

<application
    ...
    android:supportsRtl="true"
/>