2016-07-26 1 views
3

Как мы можем зарезервировать пространство одинаково в компоновке ограничений, как в LinearLayout?
Например, как будет выглядеть нижний макет, если он был написан с ограничениями?Как сопоставить взвешенный LinearLayout с конструкцией ограничения

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="horizontal"> 

    <TextView 
    android:id="A" 
    android:layout_width="0dp" 
    android:layout_height="wrap_content" 
    android:layout_weight="1" /> 

    <TextView 
    android:id="B" 
    android:layout_width="0dp" 
    android:layout_height="wrap_content" 
    android:layout_weight="1" /> 

    <TextView 
    android:id="C" 
    android:layout_width="0dp" 
    android:layout_height="wrap_content" 
    android:layout_weight="1" /> 

    <TextView 
    android:id="D" 
    android:layout_width="0dp" 
    android:layout_height="wrap_content" 
    android:layout_weight="1" /> 
</LinearLayout> 

В Layout Constraint, я мог установить A и D до краев, A←B→D с 33 уклоном и A←C→D с 66 уклоном к виду имеют равное пространство между каждым элементом.
Это решение действительно не масштабируется.

Есть ли подходящий способ сделать это в макете Constraint?

+0

ли Вы действительно нужны детали непосредственно в ConstraintLayout, или вы можете поместить их в LinearLayout, и поставить LinearLayout в ConstraintLayout – lionscribe

+0

@lionscribe ConstraintLayout здесь, помимо прочего, делает плоский дизайн и помогает перфорировать. Поэтому я ищу способ сделать это ровным способом, без какой-либо другой вложенной компоновки. – oldergod

+0

Для этого есть новая документация по адресу https://developer.android.com/training/constraint-layout/index.html –

ответ

12

FYI - Constraint Layout alpha 9 добавлено Chains, которые позволяют реализовать это поведение.

enter image description here

+0

только что увидел, что на Твиттере. Спасибо за тяжелую работу. – oldergod

+0

Можете ли вы, пожалуйста, обновить любой пример кода. Я не могу найти этот вариант в редакторе макетов Android studio 2.2.2, например «Добавить вертикальный указатель» и «Добавить горизонтальный указатель» – ramji

+0

@ramji, он недоступен в 2.2.2 пользовательском интерфейсе, теперь вам нужно будет изменить XML.Вы можете проверить документацию Цепи на странице https://developer.android.com/reference/android/support/constraint/ConstraintLayout.html. –

7

На данный момент (макет ограничения по альфам 6) единственным вариантом является использование вертикальных рекомендаций с процентной позицией, а затем для каждого виджета они ограничивают их такими принципами: Левая сторона < - виджет A -> Руководство 1 < - виджет B -> Руководство 2 < - виджет C -> Правая сторона

С Руководством 1 по 0,33, Руководством 2 на 0,66.

Но.

В то время как он работает, я сомневаюсь, что это будет быстрее, чем использование линейного макета для этой конкретной задачи. Если все, что вам нужно, это точное поведение, просто используйте линейную компоновку (даже внутри макета ограничения). Единственное преимущество, которое он дает вам сделать с макетом ограничений, состоит в том, что вы можете определить это поведение только для данной оси, другая ось может быть ограничена совершенно по-другому (в то время как для LL она будет выровнена - но это общая потребность) ,

Хотя у нас есть планы сделать это конкретное поведение намного проще в будущих версиях макета ограничения, это не означает, что все существующие макеты никогда больше не должны использоваться.

+0

Я использовал подобный подход, но, как вы знаете, он не масштабируется; мы должны переопределить эти рекомендации, если виджет будет добавлен/удален. Спасибо за головы, так или иначе. – oldergod

+1

Да, поэтому мы планируем добавить еще один механизм для этого в ConstraintLayout. Но использование линейного макета в этом случае тоже хорошо. –

0

Например:

<Button 
    android:id="@+id/btn_a" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="ButtonA" 
    app:layout_constraintHorizontal_chainStyle="spread" 
    app:layout_constraintLeft_toLeftOf="parent" 
    app:layout_constraintRight_toLeftOf="@+id/btn_b" /> 

<Button 
    android:id="@+id/btn_b" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="ButtonB" 
    app:layout_constraintLeft_toRightOf="@+id/btn_a" 
    app:layout_constraintRight_toLeftOf="@+id/btn_c" /> 

<Button 
    android:id="@+id/btn_c" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="ButtonC" 
    app:layout_constraintLeft_toRightOf="@+id/btn_b" 
    app:layout_constraintRight_toRightOf="parent" />