Как использовать новые функции в макете ограничений 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 здесь.