Стили для детей ConstraintLayout - PullRequest
0 голосов
/ 14 января 2019

Я хочу установить общий стиль для моих внутренних элементов моего ConstraintLayout. Например, у меня есть несколько TextView s со следующими атрибутами:

    <TextView
      android:layout_width="0dp"
      android:layout_height="wrap_content"
      android:layout_marginLeft="8dp"
      android:layout_marginRight="8dp"
      app:layout_constraintLeft_toLeftOf="parent"
      app:layout_constraintRight_toRightOf="parent"/>

Я создал этот стиль для него:

    <style name="PageTitleStyle">
      <item name="android:layout_width">0dp</item>
      <item name="android:layout_height">wrap_content</item>
      <item name="android:layout_marginRight">8dp</item>
      <item name="android:layout_marginLeft">8dp</item>
   </style>

но как я могу установить эти атрибуты для определенного стиля?

       app:layout_constraintLeft_toLeftOf="parent"
       app:layout_constraintRight_toRightOf="parent"

Ответы [ 2 ]

0 голосов
/ 14 января 2019

Вы можете определить свои атрибуты в стилях следующим образом:

<style name="MyStyle">
    <item name="layout_constraintLeft_toLeftOf">parent</item>
    <item name="layout_constraintRight_toRightOf">parent</item>
</style>

Затем вы можете указать style="@style/MyStyle" для каждого TextView.

Установка стиля на ConstraintLayout не установит стиль на дочерних элементах ConstraintLayout, если вы не установите стиль в качестве темы. См. «Применение стиля в качестве темы» . (Акцент мой.)

Начиная с Android 5.0 (уровень API 21) и библиотеки поддержки Android v22.1, вы также можете указать атрибут android: theme для представления в файле макета. Это изменяет тему для этого представления и любых дочерних представлений , что полезно для изменения цветовых палитр темы в определенной части вашего интерфейса.

Таким образом, вы бы добавили android:theme="@style/MyStyle" к ConstraintLayout. Это заменит существующую тему, поэтому вы можете установить AppTheme в качестве родителя MyStyle.

Есть один странный побочный эффект, который я заметил при этом: ограничения, названные в стиле, влияют на отображение макета в дизайнере студии (правильно), но сами ограничения не отображаются. Редактор макета также не поймет, что ограничения определены в стиле, и выдаст ошибки «отсутствует ограничение». (Android Studio 3.3 RC3)

0 голосов
/ 14 января 2019

Ограничения отношений не могут быть использованы в «стиле». Попробуйте использовать его в макете

...