Относительная компоновка alignParentLeft vs alignParentStart

Поэтому мне комфортно использовать относительные макеты, но, привыкнув к Android Studio, я заметил, что в моих относительных макетах child views он генерирует оба из следующих.

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

Я проверил здесь документы Android, но не вижу различия между ними. Разумеется, замена Android в Android Studio не показала различий. Есть ли это?

Solutions Collecting From Web of "Относительная компоновка alignParentLeft vs alignParentStart"

Это зависит от направления макета. Направление макета может быть слева направо (начало = слева, конец = справа) или справа налево (наоборот).

По умолчанию направление макета основано на локали (слева направо для таких языков, как английский, справа налево для таких языков, как арабский), но вы можете переопределить его с помощью атрибута layoutDirection XML или функции setLayoutDirection . например:

 android:layoutDirection="ltr" 

^ Будет эквивалент alignParentStart для выравниванияParentLeft на всех устройствах.

 android:layoutDirection="rtl" 

^ Будет эквивалент alignParentStart для выравниванияParentRight на всех устройствах. Вы также можете установить «locale», чтобы использовать локаль или «наследовать», чтобы наследовать направление макета из родительского представления.

Вам нужно добавить android:supportsRtl="true" в ваш AndroidManifest.xml для поддержки макетов справа налево.

Также связанные: android: textDirection

 android:layout_alignParentStart="true" 

Выравнивает начальную границу этого представления с начальным краем родительского элемента. Это левый край для локалей LTR (слева направо), а правый – на языках RTL (справа налево), таких как арабский, иврит, персидский и т. Д.

Причина, по которой Android Studio добавляет

 android:layout_alignParentLeft="true" 

К вашим представлениям относится поддержка старых платформ, которые появились до версии 4.2.x Jelly Bean . Атрибуты Start / End, такие как layout_alignParentStart , доступны только от API 17. Новые платформы возвращают атрибуты Left / Right только в том случае, если соответствующие атрибуты Start / End не найдены.

В случае, если ваше приложение поддерживает устаревшие платформы с помощью android:minSdkVersion ниже уровня 17 вы всегда должны предоставлять атрибуты Left / Right для своих просмотров. В противном случае проект не будет компилироваться с сообщением об ошибке, например

Чтобы поддерживать более старые версии, чем API 17 (проект указывает 7), вы также должны добавить android: layout_alignParentLeft = "true"

Также обратите внимание, что вашему Android-приложению необходимо заявить о своей поддержке локальных RTL в вашем AndroidManifest.xml .

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

Эти атрибуты «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».