Android中isEmpty时如何修复背景红色的TextInputLayout

我想setErrorTextInputLayout isEmpety ,我写这个代码,但是当显示错误信息,为TextInputLayout设置红色背景!
不想设置背景! 只想显示错误信息。

在这里输入图像说明

我的代码:

 if (TextUtils.isEmpty(userName)) { register_UserName_layout.setError("Insert Username"); } 

XML代码:

 <android.support.design.widget.TextInputLayout android:id="@+id/register_userUsernameTextLayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/register_headerLayout" android:layout_margin="10dp" android:textColorHint="#c5c5c5"> <EditText android:id="@+id/register_userUserNameText" android:layout_width="match_parent" android:layout_height="40dp" android:background="@drawable/selector_bg_edit" android:hint="نام کاربری" android:paddingBottom="2dp" android:textColor="@color/colorAccent" android:textCursorDrawable="@drawable/bg_input_cursor" android:textSize="16sp" /> </android.support.design.widget.TextInputLayout> 

我怎样才能解决这个问题? 感谢所有<3

 if (TextUtils.isEmpty(userName)) { register_UserName_layout.setError("Insert Username"); txtInpit.setColorFilter(R.color.white); } 

我find了解决这个问题的办法。 你只需要创build一个自定义的EditText并覆盖它的getBackground()方法来返回一个新的drawable。 这样,TextInputLayout将无法在EditText的背景上设置颜色filter,因为您不返回EditText的背景,而是另一个可绘制的。 见下文:

 @Override public Drawable getBackground() { return ContextCompat.getDrawable(getContext(), R.drawable.some_drawable); } 

并在TextInputLayout中使用自定义EditText:

 <android.support.design.widget.TextInputLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <CustomEditText android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/custom_edit_text_bg" /> </android.support.design.widget.TextInputLayout> 

您可以inheritanceTextInputLayout并使用它:

 package com.mypackage; import android.content.Context; import android.graphics.drawable.Drawable; import android.support.annotation.Nullable; import android.support.design.widget.TextInputLayout; import android.util.AttributeSet; public class CustomTextInputLayout extends TextInputLayout { public CustomTextInputLayout(Context context) { super(context); } public CustomTextInputLayout(Context context, AttributeSet attrs) { super(context, attrs); } public CustomTextInputLayout(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override protected void drawableStateChanged() { super.drawableStateChanged(); clearEditTextColorfilter(); } @Override public void setError(@Nullable CharSequence error) { super.setError(error); clearEditTextColorfilter(); } private void clearEditTextColorfilter() { EditText editText = getEditText(); if (editText != null) { Drawable background = editText.getBackground(); if (background != null) { background.clearColorFilter(); } } } } 

在你的布局中:

 <com.mypackage.CustomTextInputLayout android:id="@+id/register_userUsernameTextLayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/register_headerLayout" android:layout_margin="10dp" android:textColorHint="#c5c5c5"> <EditText android:id="@+id/register_userUserNameText" android:layout_width="match_parent" android:layout_height="40dp" android:background="@drawable/selector_bg_edit" android:hint="نام کاربری" android:paddingBottom="2dp" android:textColor="@color/colorAccent" android:textCursorDrawable="@drawable/bg_input_cursor" android:textSize="16sp" /> </android.support.design.widget.TextInputLayout> 

类似于Shahin Mursalov的回答,我调用方法init()在构造函数中存储创build视图时可以绘制的背景。 另外,我也重写了方法setBackgroundResource()来存储背景,并从getBackground()返回:

 public class CustomEditText extends EditText{ private Drawable backgroundDrawable; public EditTextContext context) { super(context); this.context = context; } public EditTextContext context, AttributeSet attrs) { super(context, attrs); this.context = context; init(attrs); } public EditText(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); this.context = context; init(attrs); } public void init(AttributeSet attrs){ TypedArray attributes = context.obtainStyledAttributes(attrs, new int[]{android.R.attr.background}); this.backgroundDrawable = attributes.getDrawable(0); attributes.recycle(); } @Override public void setBackgroundResource(@DrawableRes int resId) { this.backgroundDrawable = ContextCompat.getDrawable(context, resId); super.setBackgroundResource(resId); } @Override public Drawable getBackground() { if (backgroundDrawable != null){ return backgroundDrawable; } else { return super.getBackground(); } } } 

这样我可以在我的布局中指定不同的背景,并以编程方式更改它。