Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

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

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

android:layoutDirection="ltr"   

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

android:layoutDirection="rtl"   

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

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

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

Ответ 2

android:layout_alignParentStart="true"

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

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

android:layout_alignParentLeft="true"

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

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

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

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

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

Ответ 3

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