Я хотел бы разместить два TextView рядом друг с другом и позволить им расширяться в зависимости от их содержимого.
Содержимое обоих TextView полностью динамично и непредсказуемо, поэтому я хочу, чтобы решение работало согласованно во всех случаях, показанных на изображении ниже:
Я пробовал разные настройки LinearLayout, ConstraintLayout и RelativeLayout, но ни одна из них не работала стабильно во всех случаях. Чтобы создать макет, который вы видите на скриншоте выше, мне пришлось вручную настроить атрибуты каждого TextView в зависимости от длины текста. Тем не менее, я предполагаю, что не смогу легко оценить, сколько места каждый текст будет занимать во время выполнения (например, будет ли он заключен в несколько строк и т. д.), поэтому я боюсь, что я не могу динамически точно - настроить свойства TextViews в зависимости от их содержимого. Вот почему я пытаюсь найти какую-то настройку, которая работала бы стабильно без моего вмешательства, хотя я понимаю, что это может оказаться невозможным. В любом случае, я надеюсь, что просто пропустил что-то очевидное.
В качестве альтернативы я бы рассмотрел «измерение» ожидаемой ширины каждого текста, чтобы принять решение относительно настроек обоих TextView и динамически настроить их, но только в крайнем случае.
@AskNilesh Да. В решении, которое вы указали, для одного из TextView установлено значение wrap_content, а для другого — 0dp. Когда TextView с wrap_content очень длинный, другой TextView со значением 0dp полностью исчезнет. Это решение работает нормально только тогда, когда один из TextViews (тот, что с wrap_content) всегда короче.
Установите для обоих текстовых представлений значение 0dp. И если вы используете Constraint layout, ограничьте стороны обоих представлений самими собой и родителем. Вы должны получить желаемый результат.
Я пытался, но это не сработало так, как я хотел. Установка обоих на 0dp и ограничение их друг другом делает оба TextView одинаково широкими - они всегда занимают половину ширины родителя.
Вы можете попробовать добиться вышеуказанного результата, используя 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, но это лучшее решение, которое я нашел до сих пор.
Вы пробовали это stackoverflow.com/a/52440662/7666442