Не изменяйте фон TextInputLayout, когда счетчик превышает его максимальную длину - PullRequest
0 голосов
/ 21 октября 2019

Мне бы хотелось, чтобы у моего редактируемого текста был нормальный фон без красного цвета, когда счетчик превышает его максимальную длину. И я хотел бы изменить цвет текста на красный, когда он превышает.

Теперь это выглядит так:

Я хочу, чтобы это выглядело так

Я пытался использовать это решение здесь , но когда счетчик превышает метод, setError(error: CharSequence?) не вызывался, и невозможно переопределить метод updateCounter(length: Int), чтобы вручную установить ошибку самостоятельно.

class NoChangingBackgroundTextInputLayout : TextInputLayout {

    private val backgroundDefaultColorFilter: ColorFilter?
        get() {
            var defaultColorFilter: ColorFilter? = null
            if (editText != null && editText!!.background != null)
                defaultColorFilter = DrawableCompat.getColorFilter(editText!!.background)
            return defaultColorFilter
        }

    constructor(context: Context) : super(context) {}

    constructor(context: Context, attrs: AttributeSet) : super(context, attrs) {}

    constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super(context, attrs, defStyleAttr) {}

    override fun setError(error: CharSequence?) {
        val defaultColorFilter = backgroundDefaultColorFilter
        super.setError(error)
        //Reset EditText's background color to default.
        updateBackgroundColorFilter(defaultColorFilter)
    }

    override fun drawableStateChanged() {
        val defaultColorFilter = backgroundDefaultColorFilter
        super.drawableStateChanged()
        //Reset EditText's background color to default.
        updateBackgroundColorFilter(defaultColorFilter)
    }

    private fun updateBackgroundColorFilter(colorFilter: ColorFilter?) {
        if (editText != null && editText!!.background != null)
            editText!!.background.colorFilter = colorFilter
    }
}

Мой XML-макет выглядит следующим образом:

<NoChangingBackgroundTextInputLayout
    android:id="@+id/textInputLayout"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginStart="16dp"
    android:layout_marginEnd="16dp"
    app:counterEnabled="true"
    app:counterMaxLength="250"
    app:counterTextAppearance="@style/CounterTextViewStyle"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/textView18">

    <android.support.design.widget.TextInputEditText
        style="@style/MyEditText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="top|left" android:inputType="textMultiLine|textCapSentences"
        android:maxLines="10"
        android:minLines="8"
        android:paddingTop="6dp"
        android:paddingBottom="6dp"
        android:scrollbars="vertical"
        android:textSize="16sp"
        tools:text="adfsg sdg asg asd asgd asdgasdgc asgasdgasd gasd gasd sdagsadgag asg"/>

</NoChangingBackgroundTextInputLayout>

Как изменить текст редактируемого текста на красный, чтобы фон оставался прежним?

...