Относительная компоновка alignParentLeft vs alignParentStart
Поэтому мне комфортно использовать относительные макеты, но, привыкнув к Android Studio, я заметил, что в моих родительских представлениях относительного макета он сгенерировал оба из следующих.
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true
Я проверил Android docs здесь, но не вижу различий между ними. Разумеется, замена Android в Android Studio не отличается заметной разницей. Есть один?
Ответы
Ответ 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".