相对布局alignParentLeft vs alignParentStart [复制]

问题描述 投票:15回答:3

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

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

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

android android-relativelayout
3个回答
13
投票

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

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

android:layoutDirection="ltr"   

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

android:layoutDirection="rtl"   

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

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

也有关:android:textDirection


5
投票
android:layout_alignParentStart="true"

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

Android Studio也增加了原因

android:layout_alignParentLeft="true"

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

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

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

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

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

1
投票

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

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

你可以看一下more here

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

但RTL仅支持17或更高版本的sdk。

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

© www.soinside.com 2019 - 2024. All rights reserved.