ConstraintLayout - Есть элемент взять необходимое пространство до того, что доступно

голоса
10

У меня есть TextView и кнопка организованной горизонтально, в последовательности, в ConstraintLayout:

Работа

Я нужен первый элемент (TextView) брать только необходимое пространство, когда текст достаточно короткий, но расширять по мере необходимости, когда больше текста должен отображаться в то же время оставляя достаточно мест для второго элемента (Button), чтобы быть полностью оказанным внутри вид с его конца выравнивается до конца родителя.

Это то, что в настоящее время выглядит как XML:

<android.support.constraint.ConstraintLayout
    android:layout_width=match_parent
    android:layout_height=wrap_content
    android:layout_margin=16dp>

    <TextView
        android:id=@+id/element1
        android:layout_width=wrap_content
        android:layout_height=wrap_content
        android:layout_gravity=center_vertical
        android:layout_marginEnd=8dp
        android:layout_marginRight=8dp
        app:layout_constraintBottom_toBottomOf=parent
        app:layout_constraintTop_toTopOf=parent
        tools:text=Short enough text/>

    <Button
        android:id=@+id/element2
        android:layout_width=wrap_content
        android:layout_height=48dp
        android:layout_gravity=center_vertical
        android:layout_marginEnd=8dp
        android:layout_marginLeft=8dp
        android:layout_marginRight=8dp
        android:layout_marginStart=8dp
        android:drawableLeft=@drawable/element2ButtonDrawable
        android:drawablePadding=0dp
        android:drawableStart=@drawable/element2ButtonDrawable
        android:text=Action
        app:layout_constraintBottom_toBottomOf=parent
        app:layout_constraintLeft_toRightOf=@id/element1
        app:layout_constraintTop_toTopOf=parent
        app:layout_constraintRight_toRightOf=parent
        app:layout_constraintHorizontal_bias=0.0/>

 </android.support.constraint.ConstraintLayout>

Это как дерево делает при переключении с «достаточно коротким текста», чтобы «длинным текстом, который будет вызывать большую часть дна, чтобы выталкивается наружу из родительского вида границ»:

необоснованная

Можно ли добиться того, что я пытаюсь сделать с помощью ConstraintLayout?

(На момент написания, последняя версия 1.0.2)

Благодаря!

Задан 20/03/2017 в 21:50
источник пользователем
На других языках...                            


2 ответов

голоса
1

Вы должны использовать упакованы горизонтальную цепочку с вашим TextView, имеющей ширину, которая соответствует ограничениям и горизонтальное смещение равна 0.0

Вот решение:

<android.support.constraint.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="16dp">

    <TextView
        android:id="@+id/textView"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginRight="8dp"
        android:text="Short enough text"
        app:layout_constraintWidth_default="wrap"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toLeftOf="@+id/button"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintHorizontal_chainStyle="packed"
        app:layout_constraintHorizontal_bias="0.0" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="48dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:drawablePadding="0dp"
        android:drawableStart="@drawable/element2buttondrawable"
        android:text="Action"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintLeft_toRightOf="@+id/textView"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintBottom_toBottomOf="parent" />

</android.support.constraint.ConstraintLayout>

Вот как эта схема выглядит на устройстве с другим текстом и ориентацией:

вид Результат

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

Ответил 23/10/2017 в 15:33
источник пользователем

голоса
1

Попробуйте что-то вроде этого:

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="16dp">

    <TextView
        android:id="@+id/element1"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginEnd="8dp"
        android:layout_marginRight="8dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toLeftOf="@+id/element2"
        app:layout_constraintTop_toTopOf="parent"
        tools:text="A longer text that will cause most of the bottom to get pushed outside of the parent view bounds" />

    <Button
        android:id="@+id/element2"
        android:layout_width="wrap_content"
        android:layout_height="48dp"
        android:layout_marginEnd="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginStart="8dp"
        android:text="Action"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintHorizontal_bias="1.0"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>
Ответил 26/03/2017 в 07:30
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more