Разверните два TextView рядом друг с другом

Я хотел бы разместить два TextView рядом друг с другом и позволить им расширяться в зависимости от их содержимого.

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

  1. Содержимое первого TextView очень длинное (и может также оказаться, что оно должно быть заключено в несколько строк), в то время как содержимое другого TextView относительно короткое.
  2. Ровно наоборот, т.е. содержимое первого TextView короче.
  3. Содержимое обоих TextView длинное и должно быть обернуто. В идеале они должны встретиться посередине.

Я пробовал разные настройки LinearLayout, ConstraintLayout и RelativeLayout, но ни одна из них не работала стабильно во всех случаях. Чтобы создать макет, который вы видите на скриншоте выше, мне пришлось вручную настроить атрибуты каждого TextView в зависимости от длины текста. Тем не менее, я предполагаю, что не смогу легко оценить, сколько места каждый текст будет занимать во время выполнения (например, будет ли он заключен в несколько строк и т. д.), поэтому я боюсь, что я не могу динамически точно - настроить свойства TextViews в зависимости от их содержимого. Вот почему я пытаюсь найти какую-то настройку, которая работала бы стабильно без моего вмешательства, хотя я понимаю, что это может оказаться невозможным. В любом случае, я надеюсь, что просто пропустил что-то очевидное.

В качестве альтернативы я бы рассмотрел «измерение» ожидаемой ширины каждого текста, чтобы принять решение относительно настроек обоих TextView и динамически настроить их, но только в крайнем случае.

Вы пробовали это stackoverflow.com/a/52440662/7666442

AskNilesh 10.05.2023 15:52

@AskNilesh Да. В решении, которое вы указали, для одного из TextView установлено значение wrap_content, а для другого — 0dp. Когда TextView с wrap_content очень длинный, другой TextView со значением 0dp полностью исчезнет. Это решение работает нормально только тогда, когда один из TextViews (тот, что с wrap_content) всегда короче.

Andrzej Zabost 10.05.2023 16:03
1
2
65
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Установите для обоих текстовых представлений значение 0dp. И если вы используете Constraint layout, ограничьте стороны обоих представлений самими собой и родителем. Вы должны получить желаемый результат.

Я пытался, но это не сработало так, как я хотел. Установка обоих на 0dp и ограничение их друг другом делает оба TextView одинаково широкими - они всегда занимают половину ширины родителя.

Andrzej Zabost 11.05.2023 13:16
Ответ принят как подходящий

Вы можете попробовать добиться вышеуказанного результата, используя Flexbox

<?xml version = "1.0" encoding = "utf-8"?>
<com.google.android.flexbox.FlexboxLayout 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"
    android:padding = "8dp"
    app:flexDirection = "row">

    <TextView
        android:id = "@+id/textview1"
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        android:layout_margin = "8dp"
        tools:text = "@tools:sample/lorem/random" />

    <TextView
        android:id = "@+id/textview2"
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        android:layout_margin = "8dp"
        tools:text = "@tools:sample/lorem/random" />

</com.google.android.flexbox.FlexboxLayout>

результат:

Взгляните на все параметры, которые Flexbox предоставляет для настройки в соответствии с вашими потребностями. например app:layout_minWidth который обеспечивает минимальную ширину для детей.

FlexboxLayout с app:flexWrap = "nowrap", app:justifyContent = "space_between" и разумным app:layout_minWidth сделали свое дело, спасибо! Было бы здорово избежать app:layout_minWidth, но это лучшее решение, которое я нашел до сих пор.
Andrzej Zabost 11.05.2023 13:28

Другие вопросы по теме