Есть ли возможность изменить положение textView, если текст выходит за рамки экрана?

Ситуация такова: у меня есть макет ограничения с 3 TextViews подряд

        <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 = "wrap_content"
    android:layout_marginBottom = "10dp"
    android:id = "@+id/constraint"
    tools:context = ".MainActivity">

    <TextView
        android:id = "@+id/small"
        android:layout_width = "wrap_content"
        android:layout_height = "20dp"
        android:text = "5"
        app:layout_constraintStart_toStartOf = "parent"
        app:layout_constraintTop_toTopOf = "parent" />

    <TextView
        android:id = "@+id/medium"
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        android:text = "Some text, not too long"
        android:layout_marginStart = "10dp"
        app:layout_constraintStart_toEndOf = "@id/small"
        app:layout_constraintTop_toTopOf = "parent" />

    <TextView
        android:id = "@+id/big"
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        android:text = "Text, that can be extremely long, but can be also short"
        android:layout_marginStart = "10dp"
        app:layout_constraintStart_toEndOf = "@id/medium"
        app:layout_constraintTop_toTopOf = "parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

Последний textView может быть очень длинным, и когда это так, я хотел бы переместить этот textView под textView с идентификатором среды, чтобы текст в текстовом представлении не был разделен. Это означает, что я не хочу отображать текст в textView в двух строках, я хочу, чтобы текст отображался в одной строке. Если текст короткий: на том же уровне, что и другие textViews (рисунок 1), если текст слишком велик и не помещается на экране, весь textView должен отображаться под вторым textView(@+id/medium) - рисунок 2.

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

Стандартная ситуация, когда текст не слишком большой:

Есть ли возможность изменить положение textView, если текст выходит за рамки экрана?

Что я хотел бы иметь, если текст слишком большой:

Есть ли возможность изменить положение textView, если текст выходит за рамки экрана?

@DavidKroukamp, ​​к сожалению, нет. Решение здесь разбивает текст на две строки, и именно этого я пытаюсь избежать. Мне нужно, чтобы весь textView (последний) отображался под вторым textView (и только в ситуации с длинным текстом)

Elmpt 20.12.2020 13:54
1
1
332
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать Flow (нет, не тот), который является помощником макета в стиле flexbox для ConstraintLayout.

<?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:id = "@+id/constraint"
    android:layout_width = "match_parent"
    android:layout_height = "wrap_content"
    android:layout_marginBottom = "10dp"
    tools:context = ".MainActivity"
    tools:ignore = "MissingConstraints">

    <androidx.constraintlayout.helper.widget.Flow
        android:layout_width = "match_parent"
        android:layout_height = "wrap_content"
        app:constraint_referenced_ids = "small, medium, big"
        app:flow_horizontalBias = "0"
        app:flow_horizontalGap = "10dp"
        app:flow_horizontalStyle = "packed"
        app:flow_wrapMode = "chain"
        app:layout_constraintTop_toTopOf = "parent" />

    <TextView
        android:id = "@+id/small"
        android:layout_width = "wrap_content"
        android:layout_height = "20dp"
        android:text = "5" />

    <TextView
        android:id = "@+id/medium"
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        android:text = "Some text, not too long" />

    <TextView
        android:id = "@+id/big"
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        android:text = "Text, that can be extremely long, but can be also short" />


</androidx.constraintlayout.widget.ConstraintLayout>

По сути, он просто позволяет вам определить цепочку элементов и обрабатывать их ограничения (обратите внимание на tools:ignore = "MissingConstraints" в основном макете, вы не размещаете их на самих представлениях), а затем вы можете настроить его на перенос, когда что-то выходит за пределы экрана и т. д. , Есть множество настроек, которые вы можете сделать, например, установить максимальное количество элементов в строке, сформировать выровненную сетку и т. д.

Здесь есть неплохой визуальный гайд: https://proandroiddev.com/awesomeness-of-constraintlayout-flow-aa0b5edd5df

Большое спасибо! Кажется, у меня это хорошо работает, оно действительно переводит весь текстовый вид на следующую строку. Я собираюсь еще немного поиграть с кодом, чтобы познакомиться с Flow, но это, очевидно, то, что я хотел. И ссылка очень полезная!

Elmpt 20.12.2020 16:50

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