Редактирование строки прокрутки текста в макете Constraint

Я пытаюсь показать полосу прокрутки в тексте редактирования только в том случае, когда высота моего текста редактирования достигает в конце моей высоты макета. Это работает отлично, если я вхожу/добавляю пустое пространство, но его вызывающая проблема, когда мой текст достигает конца моей ширины текста редактирования. Когда мой текст достигнет конца моей ширины текста редактирования, он начнет показывать мне полосу прокрутки, тогда как она появится, когда я дойду до (высоты) конца экрана.

Пожалуйста, совет, как я могу решить эту проблему. Пожалуйста, найдите прилагаемое изображение и код для справки. enter image description here

<?xml version="1.0" encoding="utf-8"?>
<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">

    <EditText
        android:id="@+id/editFeedback"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:bufferType="spannable"
        android:gravity="top"
        android:hint="Some text"
        android:inputType="textCapSentences|textMultiLine"
        android:minHeight="120dp"
        android:overScrollMode="ifContentScrolls"
        android:scrollbarStyle="insideInset"
        android:scrollbars="vertical"
        android:selectAllOnFocus="true"
        android:textIsSelectable="true"
        android:textSize="16sp"
        app:layout_constraintBottom_toTopOf="@+id/buttonSend"
        app:layout_constraintEnd_toEndOf="@id/guidelineEnd"
        app:layout_constraintHeight_default="wrap"
        app:layout_constraintStart_toStartOf="@id/guidelineStart"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.0"
        app:layout_constraintVertical_chainStyle="packed"
        tools:text="" />

    <Button
        android:id="@+id/buttonSend"
        style="@style/Widget.AppCompat.Button.Colored"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="end"
        android:text="Send"
        android:textAllCaps="false"
        app:layout_constraintBottom_toBottomOf="@+id/barrierEnd"
        app:layout_constraintEnd_toEndOf="@id/guidelineEnd"
        app:layout_constraintTop_toBottomOf="@+id/editFeedback" />

    <TextView
        android:id="@+id/Footer"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="start"
        android:layout_marginBottom="100dp"
        android:text="This is a footer"
        android:textSize="15sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

    <android.support.constraint.Guideline
        android:id="@+id/guidelineStart"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintGuide_begin="8dp" />

    <android.support.constraint.Guideline
        android:id="@+id/guidelineEnd"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintGuide_end="8dp" />

    <android.support.constraint.Barrier
        android:id="@+id/barrierEnd"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:barrierDirection="top"
        app:constraint_referenced_ids="Footer" />

</android.support.constraint.ConstraintLayout>

Ответы

Ответ 1

Это может помочь мне отредактировать некоторые вещи в коде. Я удалил барьер и изменил его с помощью горизонтальной направляющей и установил эту директиву на 80% высоты экрана, а нижний колонтитул выровнен по горизонтали. Пожалуйста, смотрите код ниже. Я надеюсь, что он решает вашу проблему. Если у вас есть какие-либо сомнения относительно того, как я устанавливаю ограничения, я буду рад помочь.

   <?xml version="1.0" encoding="utf-8"?>
<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">

    <EditText
        android:id="@+id/editFeedback"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_marginBottom="60dp"
        android:bufferType="spannable"
        android:gravity="top"
        android:hint="Some text"
        android:inputType="textCapSentences|textMultiLine"
        android:minHeight="120dp"
        android:overScrollMode="ifContentScrolls"
        android:scrollbarStyle="insideInset"
        android:scrollbars="vertical"
        android:selectAllOnFocus="true"
        android:textIsSelectable="true"
        android:textSize="16sp"
        app:layout_constraintBottom_toTopOf="@+id/guideline"
        app:layout_constraintEnd_toEndOf="@id/guidelineEnd"
        app:layout_constraintHeight_default="wrap"
        app:layout_constraintStart_toStartOf="@id/guidelineStart"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_chainStyle="packed"
        tools:text="" />

    <Button
        android:id="@+id/buttonSend"
        style="@style/Widget.AppCompat.Button.Colored"
        android:layout_width="wrap_content"
        android:layout_height="50dp"
        android:layout_gravity="end"
        android:layout_marginBottom="8dp"
        android:layout_marginTop="8dp"
        android:text="Send"
        android:textAllCaps="false"
        app:layout_constraintBottom_toTopOf="@+id/guideline"
        app:layout_constraintEnd_toEndOf="@id/guidelineEnd"
        app:layout_constraintTop_toBottomOf="@+id/editFeedback"
        app:layout_constraintVertical_bias="0.00999999" />

    <TextView
        android:id="@+id/Footer"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="start"
        android:layout_marginBottom="8dp"
        android:text="This is a footer"
        android:textSize="15sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="@+id/guideline" />

    <android.support.constraint.Guideline
        android:id="@+id/guidelineStart"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintGuide_begin="8dp" />

    <android.support.constraint.Guideline
        android:id="@+id/guidelineEnd"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintGuide_end="8dp" />

    <android.support.constraint.Guideline
        android:id="@+id/guideline"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:layout_constraintGuide_percent="0.8" />

</android.support.constraint.ConstraintLayout>

А также вот образ того, как выглядит макет. Layout

Ответ 2

Его работа моя сторона Пожалуйста, проверьте на вашей стороне может быть его.

<?xml version="1.0" encoding="utf-8"?>
<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">

    <EditText
        android:id="@+id/editFeedback"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:bufferType="spannable"
        android:gravity="top"
        android:hint="Some text"
        android:inputType="textCapSentences|textMultiLine"
        android:minHeight="120dp"
        android:overScrollMode="ifContentScrolls"
        android:scrollbarStyle="insideInset"
        android:scrollbars="vertical"
        android:selectAllOnFocus="true"
        android:textIsSelectable="true"
        android:textSize="16sp"
        app:layout_constraintBottom_toTopOf="@+id/buttonSend"
        app:layout_constraintEnd_toEndOf="@+id/guidelineEnd"
        app:layout_constraintHeight_default="wrap"
        app:layout_constraintStart_toStartOf="@+id/guidelineStart"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.0"
        app:layout_constraintVertical_chainStyle="packed"
        tools:text="" />

    <Button
        android:id="@+id/buttonSend"
        style="@style/Widget.AppCompat.Button.Colored"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="end"
        android:text="Send"
        android:textAllCaps="false"
        app:layout_constraintBottom_toBottomOf="@+id/barrierEnd"
        app:layout_constraintEnd_toEndOf="@+id/guidelineEnd"
        app:layout_constraintTop_toBottomOf="@+id/editFeedback" />

    <TextView
        android:id="@+id/Footer"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="start"
        android:layout_marginBottom="100dp"
        android:text="This is a footer"
        android:textSize="15sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

    <android.support.constraint.Guideline
        android:id="@+id/guidelineStart"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintGuide_begin="8dp" />

    <android.support.constraint.Guideline
        android:id="@+id/guidelineEnd"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintGuide_end="8dp" />

    <android.support.constraint.Barrier
        android:id="@+id/barrierEnd"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:barrierDirection="top"
        app:constraint_referenced_ids="Footer" />

</android.support.constraint.ConstraintLayout>

Ответ 3

Я считаю, что это можно достичь программным путем.

Отключение вертикальной полосы прокрутки, когда текст достигнет последнего символа линии, сделает трюк. editText.setVerticalScrollBarEnabled(false); , Кроме того, после того, как текст вернется на следующую строку, полосу прокрутки можно снова установить на true editText.setVerticalScrollBarEnabled(true);

Я мог бы начать с таких интерфейсов, как TextWatcher и EditText.OnScrollChangeListener и использовать их при одновременном включении/отключении полосы прокрутки.

Ответ 4

Проблема здесь - windowSoftInputMode. Если вы не укажете windowSoftInputMode в манифесте, тогда он будет использоваться по умолчанию как stateUnspecified или adjustUnspecified.

В настоящий момент ваш EditText изменяется, когда открывается программная клавиатура. Попытайтесь добавить windowSoftInputMode чтобы избежать изменения размера или размещения макета в ScrollView (в случае, если вы хотите, чтобы весь макет был видимым во время открытой мягкой клавиатуры).

вы можете указать adjustNothing. Это предотвратит изменение размера.

<activity android:name=".MainActivity"
        android:windowSoftInputMode="adjustNothing"
        >
    </activity>