相对布局 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 以支持从右到左的布局。
这些 "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 属性。
如果您的应用程序支持使用低于级别 17
的 android: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"
/>
所以我很习惯使用相对布局,但是在习惯 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 以支持从右到左的布局。
这些 "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 属性。
如果您的应用程序支持使用低于级别 17
的 android: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"
/>