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

11 android android-edittext android-textinputlayout

我想setError什么时候TextInputLayout isEmpty,我写这段代码但是当显示错误信息时,设置红色背景TextInputLayout!

不想要设置背景!只想显示错误消息.

在此输入图像描述

我的代码:

if (TextUtils.isEmpty(userName)) {
register_UserName_layout.setError("Insert Username");
}
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

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

小智 12

我找到了解决这个问题的方法.您只需要创建一个自定义的EditText并覆盖它的getBackground()方法以返回一个新的drawable.这样TextInputLayout将无法在EditText的背景上设置颜色过滤器,因为您没有返回EditText的背景,而是另一个drawable.见下文:

@Override
public Drawable getBackground() {
    return ContextCompat.getDrawable(getContext(), R.drawable.some_drawable);
}
Run Code Online (Sandbox Code Playgroud)

并使用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>
Run Code Online (Sandbox Code Playgroud)


小智 11

在我的情况下,我添加了行

<solid android:color="@color/transparent"/>

<shape android:shape="rectangle"
xmlns:android="http://schemas.android.com/apk/res/android" >
    <stroke android:color="@color/lightGray" android:width="1dp"/>
    <solid android:color="@color/transparent"/>
    <padding android:top="7dp" android:bottom="7dp" android:left="7dp" android:right="7dp"/>
    <corners android:radius="2dp"/>
</shape>
Run Code Online (Sandbox Code Playgroud)

这只会导致红色边框而不是整个背景


Han*_*ans 6

您可以继承 TextInputLayout 并使用它:

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();
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在您的布局中:

<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>
Run Code Online (Sandbox Code Playgroud)


Ben*_*ins 5

此问题的底线是检查您的 EditText 是否设置了背景颜色。如果是这样,请将其删除并在文本输入布局小部件上添加背景颜色。这将解决大红框的问题。至少对我来说是这样。

  • 很高兴我再次遇到这个问题时对此发表评论......!好吧,我现在就学习一下。 (2认同)

Yog*_*thi -4

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