Макет-начало-конец, лево-право концепции

Я немного запутался в использовании нижеприведенных атрибутов.

> android:layout_marginRight and   android:layout_marginEnd
> android:layout_marginLeft and android:layout_marginStart
> android:layout_toLeftOf and android:layout_toStartOf
> android:layout_toRightOf and android:layout_toEndOf
> android:layout_gravity="right|end"
> android:layout_gravity="left|start"

Ниже приведены некоторые факты, которые я упомянул. Пожалуйста, поправьте меня, если я ошибаюсь.

  • Для поддержки макетов Ltr и Rtl, а также для поддержки версий до уровня API 17 рекомендуется всегда размещать вышеуказанные атрибуты парами.

  • Понятия «начало» и «конец» были добавлены в API уровня 17 и будут
    иметь приоритет для устройства Ltr с уровнем API>=17, а понятия «право» и «лево» будут иметь приоритет для устройства Ltr с уровнем API‹ 17

  • Если minskdversion нашего приложения >=17, то мы можем игнорировать атрибуты "right" и
    "left" и использовать только атрибуты "start" и "end".

  • Понятия «начало» и «конец» будут иметь приоритет во всех устройствах RTL.

Также я хотел бы знать, есть ли какой-либо неблагоприятный эффект с точки зрения производительности/оптимизации, если я добавлю вышеуказанные атрибуты в пары, например:

 <TextView
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:layout_gravity="right|end"
     android:layout_marginRight="@dimen/dp10"
     android:layout_marginEnd="@dimen/dp10"
     android:layout_marginLeft="@dimen/dp10"
     android:layout_marginStart="@dimen/dp10"
     android:layout_toLeftOf="@+id/bar"
     android:layout_toStartOf="@+id/bar"
     />

person Android Developer    schedule 04.12.2016    source источник


Ответы (1)


Чтобы поддерживать RTL в своих приложениях, вам необходимо:

  • Если уровень API вашего приложения >=17, вы должны использовать «начало» и «конец» вместо «слева» и «справа» (например: layout_marginStart)
  • Если уровень API вашего приложения ‹17, вам следует добавить «начало» и «конец» в дополнение к «слева» и «справа». Другими словами, используйте как layout_marginRight, так и layout_marginEnd Другими словами, любое ваше представление должно выглядеть так: android:id="@+id/textView"

    android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginTop="20dp"
        android:text="@string/text_Field"
        android:textSize="24sp"
        android:textStyle="bold"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/imageView" />
    

    Примечание: android:layout_marginStart="16dp"

Источник

person researcher    schedule 06.05.2017