相对布局alignParentLeft vs alignParentStart

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

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

我在这里查看了Android文档,但看不出两者之间的区别。 当然在Android Studio中相互交换显示没有明显的区别。 有吗?

这取决于布局方向。 布局方向可以是从左到右(start = left,end = right),也可以是从右到左(反之亦然)。

默认情况下,布局方向基于区域设置(对于像阿拉伯语这样的语言,从左到右依次为英语,从右到左),但您可以使用layoutDirection XML属性或setLayoutDirection函数覆盖它。 例如:

 android:layoutDirection="ltr" 

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

 android:layoutDirection="rtl" 

^将使alignParentStart等效于所有设备上的alignParentRight。 您还可以设置为“locale”以使用区域设置或“inherit”从父视图inheritance布局方向。

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

还有关: android:textDirection

 android:layout_alignParentStart="true" 

将此视图的起始边缘与其父视图的起始边缘对齐。 这是LTR(从左到右)语言环境的边缘, 右边是RTL(从右到左)语言环境语言,如阿拉伯语,希伯来语,波斯语等。

Android Studio也增加了原因

 android:layout_alignParentLeft="true" 

您的观点是支持4.2.x Jelly Bean之前的旧平台。 layout_alignParentStart开始/结束属性仅可从API 17开始提供。 只有在找不到相应的“ 开始/结束”属性时,较新的平台才会回退到“ 左/右”属性。

如果您的应用程序支持使用低于17级的android:minSdkVersion旧版平台,则必须始终为视图提供左/右属性。 否则项目将无法编译,并显示错误消息

要支持比API 17更旧的版本(项目指定7),您还应该添加android:layout_alignParentLeft =“true”

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

  

这些“xxxStart”,“xxxEnd”属性用于支持某些语言环境中的RTL(从右到左)布局。 如

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

你可以在这里看到更多 。

在正常(从左到右)布局中,“xxxStart”表示“xxxLeft”,“xxxEnd”表示“xxxRight”。但是在“从右到左”布局中,“xxxStart”表示“xxxRight”,“xxxEnd”表示“xxxLeft”。

但是RTL只支持sdk 17及更高版本。

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