Многострочный edittext работает некорректно при использовании addTextChangedListener - PullRequest
0 голосов
/ 27 мая 2020

Я использую компонент editText для ввода некоторых данных в числовом формате. Когда я не использую addTextChangedListener, он работает нормально. Когда я использую addTextChangedListener, происходит следующее: когда количество символов заполняет одну строку, первый символ следующей строки появляется один на экране, а первая строка вообще не отображается на экране. После ввода второго символа компонент возвращается в нормальное состояние, показывая все символы во всех строках. Вот экраны, показывающие поведение:

Экран 1

Экран 2

Экран 3

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

<EditText
    android:id="@+id/edit_text"
    android:layout_width="match_parent"
    android:layout_alignParentStart="true"
    android:layout_toStartOf="@id/btn_right_icon"
    android:hint="@null"
    android:gravity="center_horizontal"
    android:importantForAutofill="no"
    android:maxLines="5"
    android:paddingBottom="@dimen/_10sdp"
    android:textSize="@dimen/_22ssp"
    android:textCursorDrawable="@null"
    tools:text="Lorem ipsum dolor siat amet e tal"
    android:background="@android:color/transparent"
    android:layout_height="wrap_content" />

<View
    android:id="@+id/edit_text_line"
    android:layout_width="match_parent"
    android:layout_height="@dimen/_1sdp"
    android:layout_below="@id/edit_text"
    android:background="@android:color/black"/>

<ImageView
    android:id="@+id/btn_right_icon"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentEnd="true"
    android:layout_alignTop="@id/edit_text"
    android:layout_alignBottom="@id/edit_text"
    android:layout_marginEnd="@dimen/_2sdp"
    android:clickable="true"
    android:focusable="true"
    tools:src="@drawable/ic_error"
    android:paddingTop="0dp"
    android:paddingBottom="@dimen/_10sdp"
    android:paddingStart="@dimen/_30sdp"
    android:contentDescription="@null"
    android:scaleType="fitEnd" />
<TextView
    android:visibility="gone"
    tools:visibility="visible"
    android:id="@+id/error_text"
    android:layout_alignParentStart="true"
    android:gravity="start"
    android:layout_toStartOf="@id/btn_clear"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@id/edit_text_line"
    android:layout_marginTop="@dimen/_10sdp"
    android:textColor="?attr/colorDanger"
    android:textSize="@dimen/_11ssp"
    tools:text="Lorem ipsum dolor siat amet e tal"/>

<TextView
    android:visibility="invisible"
    tools:visibility="visible"
    android:id="@+id/btn_clear"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@id/edit_text_line"
    android:layout_alignParentEnd="true"
    android:paddingTop="@dimen/_10sdp"
    android:paddingBottom="@dimen/_2sdp"
    android:paddingStart="@dimen/_10sdp"
    android:paddingEnd="0dp"
    android:textColor="?attr/colorPrimary"
    android:fontFamily="?attr/fontBold"
    android:drawableEnd="@drawable/ic_arrow_right"
    android:drawablePadding="@dimen/_5sdp"
    android:text="@string/btn_clear"/>

Здесь код

fun addOnTextChangedListener(listener: (s: String?) -> Unit) {
    editText?.addTextChangedListener(object: TextWatcher {
        override fun afterTextChanged(s: Editable?) { }
        override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { }
        override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
          text = s?.toString()
        }
    })
}
...