android textInputEditText с пользовательским фоном не работает нормально

Я использую textInputEditText внутри textInputLayout. Мне пришлось установить фон для моего editText, чтобы получить вид с границами для моего editText. но когда я вызываю setError() в моем textInputLayout, весь цвет editText меняется на красный. но я хочу изменить только цвет текста ошибки, а не весь вид.

перед установкой ошибки:

скриншот

после установки ошибка:

скриншот

и вот мой xml-код:

<android.support.design.widget.TextInputLayout
            android:layout_alignParentTop="true"
            android:id="@+id/ex_pass_holder"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:passwordToggleEnabled="false"
            android:gravity="right">
            <android.support.design.widget.TextInputEditText
                android:id="@+id/ex_pass_et"
                android:layout_width="fill_parent"
                android:layout_height="50dp"
                android:hint="رمز عبور فعلی"
                android:inputType="textPassword"
                android:textColor="#000"
                android:textSize="15sp"
                android:gravity="right|center"
                android:background="@drawable/edittext_bg"
                android:padding="8dp"
                />
        </android.support.design.widget.TextInputLayout>

пожалуйста, помогите мне, что я делаю неправильно?


comment
Что вы хотите, чтобы произошло вместо этого?   -  person Code-Apprentice    schedule 25.06.2017
comment
@Code-Apprentice, я хочу изменить только текст ошибки, а не весь вид   -  person m7majidi    schedule 25.06.2017
comment
Мне непонятно, что я вижу на вашем скриншоте. Это два разных текстовых поля на одном экране? Или вы пытаетесь показать до и после? Что за текст над и под красным текстовым полем? Я вижу, что текст выше такой же, как и в белом текстовом поле. Это данные, введенные пользователем? А как насчет красного текста под красным текстовым полем? Это сообщение об ошибке?   -  person Code-Apprentice    schedule 25.06.2017
comment
@Code-Apprentice это снимки экрана до и после. текст выше — это подсказка, а текст ниже (красный) — текст ошибки   -  person m7majidi    schedule 25.06.2017
comment
Было бы понятнее, если бы вы разместили две отдельные фотографии.   -  person Code-Apprentice    schedule 25.06.2017
comment
p.s. У меня нет ответа на ваш вопрос. Я пытаюсь помочь вам улучшить его, чтобы мне или кому-либо еще было легче вам помочь.   -  person Code-Apprentice    schedule 25.06.2017


Ответы (1)


я исправил это, расширив TextInputLayout и переопределив некоторые методы

public class CustomTextInputLayout extends TextInputLayout {

    public CustomTextInputLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
    }



    @Override
    public void setError(@Nullable CharSequence error) {
        super.setError(error);
        try {
            EditText et = getEditText();
            Drawable editTextBackground = et.getBackground();
            editTextBackground.clearColorFilter();

        }catch (Exception e){
            e.printStackTrace();
        }
    }

    @Override
    protected void drawableStateChanged() {
        super.drawableStateChanged();
        try {
            EditText et = getEditText();
            Drawable editTextBackground = et.getBackground();
            editTextBackground.clearColorFilter();

        }catch (Exception e){
            e.printStackTrace();
        }
    }
}
person m7majidi    schedule 25.06.2017
comment
Похоже на stackoverflow.com/a/40976082/2914140. Таким образом, вы можете проверить if (et != null) { и editTextBackground != null и удалить try-catch. - person CoolMind; 31.08.2017