Как использовать новые функции в макете ограничений 1.1?

Кто-нибудь знает, как использовать новые функции в макете ограничений 1.1, а именно барьеры и процентные размеры? В Интернете нет документации, доступной в режиме онлайн, а недавние разговоры о вводе/выводе в Google по инструментам разработчика подробно описываются только заполнителями. Кстати, я узнал, как использовать группы, которые также являются новой функцией. Вам нужно просто добавить

<android.support.constraint.Group
    app:constraint_referenced_ids="button1, button2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

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

Ответы

Ответ 1

Документация о новых функциях была очень скудной, когда этот вопрос был впервые задан. Лучшее, что я мог найти, было в этот пост Reddit! Но информация там дала мне достаточно намеков, чтобы создать схему ограничения с горизонтальным барьером в ней. Это действительно сработало, и новый (бета) макет ограничения также устранил некоторые плохие проблемы с помощью wrap_content. Мое очень позитивное первое впечатление о бета-версии Constraint Layout Beta поднялось под большим количеством дополнительных тестов.

Constraint Layout Beta 3 представила новую захватывающую функцию: круговое позиционирование виджетов с использованием круга ограничений и параметра угла. "Бит 4" Ограничения компоновки " содержит несколько дополнительных исправлений, и даже some официальная документация!

Прежде чем использовать новый материал, добавьте в проект бета-ограничение.

В app/build.gradle измените зависимость компоновки ограничений на это:

compile 'com.android.support.constraint:constraint-layout:1.1.0-beta4'

Вам также может потребоваться добавить репозиторий maven в проект build.gradle (который является другим файлом в корневом каталоге проекта). Найдите раздел allprojects repositories и добавьте следующее: maven { url 'https://maven.google.com' } Итак, весь раздел должен выглядеть примерно так:

allprojects {
     repositories {
         jcenter()
         maven { url 'https://maven.google.com' }
     }
}

Теперь для забавного материала! Следующий фрагмент создает горизонтальный барьер , так что bottom_textview ниже included_layout и multiline_textview.

<android.support.constraint.Barrier
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/barrier1"
    app:barrierDirection="bottom"
    app:constraint_referenced_ids="included_layout, multiline_textview" />

<TextView
    android:id="@+id/bottom_textview"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/barrier1"
    android:layout_width="0dp"
    android:layout_height="wrap_content" />

Первое впечатление: барьеры великолепны! Мой новый макет более плоский и простой, и все еще кажется, что я делаю именно то, что хочу. Это определенно стоит попробовать.

Более подробная документация постепенно становится доступной:

@Vyacheslav A ответ также содержит большое резюме того, что могут сделать новые функции.

Ответ 2

1. Процентные размеры

По умолчанию поведение виджетов ширины 0dp (или match_constraint) распространяется (настраивается через свойство layout_constraintWidth_default). В ConstraintLayout 1.0.x у нас был выбор, чтобы изменить его на обертку, а в 1.1.x у нас есть новое значение, процент, которое позволяет нам установить виджет, чтобы взять некоторый процент от доступного пространства.

    <!-- the widget will take 40% of the available space -->
    app:layout_constraintWidth_default="percent"
    app:layout_constraintWidth_percent="0.4"

2. Барьеры

Из этого нового виджета у нас есть пример из ConstraintLayout.com. Барьеры избегают одного или нескольких виджетов, чтобы обойти Барьер. Когда это произойдет, Барьер будет двигаться сам и избегать размещения виджета (ов) над ним. В приведенном ниже примере свойство конца как text1, так и text2 не может обойти Барьер. Когда это произойдет, барьер будет двигаться вправо (или влево, если в макете RTL). Это особенно удобно при работе с различными размерами виджетов, в зависимости от некоторой конфигурации или интернационализации.

<android.support.constraint.ConstraintLayout...>
  <TextView
    android:id="@+id/text1" ... />
  <TextView
    android:id="@+id/text2" ... />
  <android.support.constraint.Barrier
    android:id="@+id/barrier"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:barrierDirection="end" <!-- start, top, bottom, right... -->
    app:constraint_referenced_ids="text1,text2" />
  <TextView
    android:id="@+id/text3"
    ...
    app:layout_constraintStart_toEndOf="@+id/barrier" />
</android.support.constraint.ConstraintLayout>

3. Группа

Группы, такие как Руководства, представляют собой виджетов с размером 0. Но Group помогает применить некоторые действия к набору виджетов. Наиболее распространенный случай - контролировать видимость коллекции виджетов. При рассмотрении этого сценария наиболее распространенным решением было сохранить список или набор представлений внутри Activity или Fragment или даже добавить ViewGroup и поместить в него все виды, контролируя видимость контейнера. Теперь вам нужно только добавить свои идентификаторы в группу, и группа будет распространять действия на все подключенные представления.

<android.support.constraint.ConstraintLayout ...>
  <TextView
    android:id="@+id/text1" ... />
  <TextView
    android:id="@+id/text2" ... />
  <android.support.constraint.Group
    android:id="@+id/group"
    ...
    app:constraint_referenced_ids="text1,text2" />
</android.support.constraint.ConstraintLayout>

В этом случае, если мы будем называть

group.setVisibility(View.GONE);

тогда text1 и text2 получат видимость GONE.

Оригинальный текст здесь.

Официальные документы с здесь.

Ответ 3

Существует некоторая информация о Barrier здесь.