Я использую компонент 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()
}
})
}