Как сделать текстовое представление всегда на экране, когда другое текстовое представление расширяется по вертикали? - PullRequest
0 голосов
/ 11 января 2019

У меня есть файл макета Android с двумя текстовыми представлениями, первый из которых может содержать длинные тексты, расширяясь вертикально вдоль пространства экрана, а другой текстовый вид содержит только одну строку текста.

Оба текстовых представления начинаются по центру на экране вертикально, а второй - только под первым.

Бывает, что содержимое первого текстового представления может измениться, добавив в него больше текста, и в какой-то момент первое текстовое представление расширяется и занимает весь экран, выталкивая второе текстовое представление за пределы экрана.

Мне нужно, чтобы второе текстовое представление не выдвигалось за пределы экрана, когда оно достигает границ экрана, второе текстовое представление должно владеть последним фрагментом пространства на экране для его содержимого.

Вот мой код:

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">


    <LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center">

        <TextView
            android:id="@+id/firstTextView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>

        <TextView
            android:id="@+id/secondTextView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:singleLine="true" />

     </LinearLayout>

</RelativeLayout>

1 Ответ

0 голосов
/ 11 января 2019

ConstraintLayout на помощь!

Зависимость в вашем build.gradle внутри app модуле:

implementation 'com.android.support.constraint:constraint-layout:1.1.3'

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

<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="match_parent">

    <TextView
        android:id="@+id/text1"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:padding="8dp"
        android:scrollbars="vertical"
        android:text="*YOUR ENDLESS TEXT HERE*"
        android:textSize="14sp"
        app:layout_constraintBottom_toTopOf="@id/barrier"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <android.support.constraint.Barrier
        android:id="@+id/barrier"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:barrierDirection="top"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

    <TextView
        android:id="@+id/text2"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:padding="8dp"
        android:singleLine="true"
        android:text="*YOUR SINGLE LINE TEXT HERE*"
        android:textSize="14sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/barrier" />
</android.support.constraint.ConstraintLayout>

Причина:

  1. ConstraintLayout значительно облегчает разработку того, чего вы хотите достичь. '
  2. ConstraintLayout предоставляет Barrier, который может остановить расширение представлений за его пределами, на которые ссылаются.

Вот, в нашем случае, вот что делает макет: Первый TextView расширяется для растягивания и охвата всего доступного вида, второй TextView фиксируется внизу, как вы хотите. Теперь Barrier будет препятствовать масштабированию первого TextView за его пределы, предоставляя фиксированное пространство второму в нижней части.

ВАЖНО: Чтобы прокрутить содержимое внутри сначала TextView, вам нужно добавить эту строку в свой Java-файл:

TextView text1 = (TextView) findViewById(R.id.text1);
text1.setMovementMethod(new ScrollingMovementMethod());

Приведенная выше декларация поможет вам прокрутить содержимое до конца, независимо от его размера, внутри самого TextView, поэтому ScrollView не требуется!

Надеюсь, это поможет:)

Ссылка: ConstraintLayout - Документация для разработчиков Android

...