Барьер компоновки ограничений Android, вызывающий вырезание кнопки в конце

#android #kotlin #android-constraintlayout

#Android #kotlin #android-constraintlayout

Вопрос:

Я использую компоновку ограничений Barrier , и это мой макет —

 <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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="match_parent">

    <TextView
        android:id="@ id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginLeft="16dp"
        android:layout_marginTop="16dp"
        android:text="abcdefghijklkkkkkkkkkkkfghjqwertzuiopasdfghhjkly"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@ id/button"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginLeft="16dp"
        android:layout_marginTop="16dp"
        android:text="Button"
        app:layout_constraintStart_toEndOf="@id/barrier"
        app:layout_constraintTop_toTopOf="parent" />

    <androidx.constraintlayout.widget.Barrier
        android:id="@ id/barrier"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:barrierDirection="end"
        app:constraint_referenced_ids="textView" />
</androidx.constraintlayout.widget.ConstraintLayout>
  

Вот как выглядит результирующее изображение —

введите описание изображения здесь

Комментарии:

1. Это решено? Разве ответ не решил проблему барьера, как указано на прилагаемом скриншоте?

2. @SaadAAkash Когда текстовое представление содержит увеличивающийся текст, в какой-то момент кнопка исчезает. Вы знаете, что можно сделать?

3. Вы видели мой ответ ниже @Maria? Я решил эту проблему в приведенном ниже ответе — вы случайно не пропустили это?

4. @SaadAAkash Я видел ваш ответ, он работает, если текст исправлен. Что, если мой текст продолжает расти, кнопка в какой-то момент исчезает, поскольку барьер продолжает двигаться вправо

5. Для этого вам нужно использовать руководство, а не барьер. Я обновил свой ответ на это требование, а также включил скриншот, пожалуйста, посмотрите @Maria

Ответ №1:

Основываясь на разговоре о том, что именно нужно OP, руководство по ограничению приведет к желаемому результату:

 <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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="match_parent">

    <TextView
        android:id="@ id/textView"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginTop="16dp"
        android:layout_marginEnd="16dp"
        android:text="abcdefghijklkkkkkkkkkkkfghjqwertzuiopasdfghhjklyabcdefghijklkkkkkkkkkkkfghjqwertzuiopasdfghhjklyabcdefghijklkkkkkkkkkkkfghjqwertzuiopasdfghhjklyabcdefghijklkkkkkkkkkkkfghjqwertzuiopasdfghhjkly"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="@id/guideline"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@ id/button"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginLeft="16dp"
        android:layout_marginTop="16dp"
        android:text="Button"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="@id/guideline"
        app:layout_constraintTop_toTopOf="parent" />

    <androidx.constraintlayout.widget.Guideline
        android:id="@ id/guideline"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintGuide_percent="0.8" />
</androidx.constraintlayout.widget.ConstraintLayout>
  

Приведенный выше код выдает следующее: если текст продолжает расти, это гарантирует, что кнопка останется на экране, как показано ниже:

руководство по ограничению

Если вы не хотите, чтобы кнопка была вырезана в конце и обернута вместо этого, добавьте конечное ограничение:

 app:layout_constraintEnd_toEndOf="parent"
  

Итак, ваш XML-файл кнопки должен быть следующим:

 <Button
        android:id="@ id/button"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginLeft="16dp"
        android:layout_marginTop="16dp"
        android:text="Button"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@id/barrier"
        app:layout_constraintTop_toTopOf="parent" />
  

Результирующий результат будет выглядеть следующим образом:

результирующий вывод макета

Теперь, если вы хотите иначе, например, кнопка останется / сохранит свой собственный размер, а textview — нет, затем установите для направления барьера start end значение вместо amp; pass в button качестве идентификаторов, на которые ссылается ограничение textview , а не как следующее:

 <android.support.constraint.Barrier
    android:id="@ id/barrier"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:barrierDirection="start"
    app:constraint_referenced_ids="button" />
  

Ответ №2:

Я попробовал этот способ blow, и он работает.

 <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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="match_parent">

    <TextView
        android:id="@ id/textView"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginTop="16dp"
        android:text="abcdefghijklkkkkkkkkkkkfghjqwertzuiopasdfghhjkly"
        app:layout_constraintEnd_toEndOf="@ id/barrier"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@ id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginLeft="16dp"
        android:layout_marginTop="16dp"
        android:text="Button"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="@id/barrier"
        app:layout_constraintTop_toTopOf="parent" />

    <androidx.constraintlayout.widget.Barrier
        android:id="@ id/barrier"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:barrierDirection="end"
        app:constraint_referenced_ids="textView" />

</androidx.constraintlayout.widget.ConstraintLayout>

  

вот так