支持库的TextInputLayout有一些bug

时间:2016-01-19 06:56:09

标签: android android-edittext android-textinputlayout

我有什么

我有一个注册表单,我使用TextWatcher进行验证。我使用了TextInputLayout支持库来突出显示错误

我的问题

当我在EditText输入错误数据时,TextInputLayout会将EditText变为red颜色

然后,当我在EditText中输入正确的输入时,将focus更改为其他字段,仍然第一个EditText为红色未更改为正常editext背景

我尝试了什么

我尝试以编程方式将EditText的背景设置为我的自定义绘图,但它给出了我的其他外观和感觉(其他颜色)

还尝试在不使用HintColor方法的情况下仅将TextInputLayout更改为setError()的红色,仍然不是结果

我的代码

第一种方法:给我一些其他颜色的背景

public boolean validateFirstName() {
        mFirstName = edFirstName.getText().toString().trim();
        if (mFirstName.isEmpty()) {
            tiFirstName.setError(mEmptyFields);
            edFirstName.requestFocus();        
            return false;
        } else {
            tiFirstName.setError(null);
            tiFirstName.setErrorEnabled(false);
            edFirstName.setBackground(getResources().getDrawable(R.drawable.ed_line_bg));
        }
        return true;
    }

第二种方法:未见变化:(

public boolean validateFirstName() {
        mFirstName = edFirstName.getText().toString().trim();
        if (mFirstName.isEmpty()) {
            edFirstName.requestFocus();
            changeTextInputLayoutColorToRed(tiFirstName);
            return false;
        } else {
            changeTextInputLayoutColorToNormal(tiFirstName);
            edFirstName.setBackground(null);
        }
        return true;
    }



public void changeTextInputLayoutColorToRed(TextInputLayout textInputLayout){
        int redColor=getResources().getColor(android.R.color.holo_red_dark);
       // textInputLayout.getEditText().setHighlightColor(redColor);
        textInputLayout.getEditText().setHintTextColor(redColor);
        textInputLayout.setError(mErrorMessage);
        textInputLayout.setErrorEnabled(true);
    }

    public void changeTextInputLayoutColorToNormal(TextInputLayout textInputLayout){
        int normalColor=getResources().getColor(R.color.text_color);
        //textInputLayout.getEditText().setHighlightColor(normalColor);
        textInputLayout.getEditText().setHintTextColor(normalColor);
        textInputLayout.setError(null);
        textInputLayout.setErrorEnabled(false);
    }

1 个答案:

答案 0 :(得分:0)

我使用TextWatcher作为验证的以下内容:

UTF-8

我将它添加到onCreate活动方法的editText中:

private class RegisterTextWatcher implements TextWatcher {
 @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {}

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {}

    @Override
    public void afterTextChanged(Editable s) {

        switch (editText.getId()){

            case R.id.name_input:
                validateName();
                break;
            ...
        }
    }
}

我的验证:

inputName.addTextChangedListener(new RegisterTextWatcher(inputName));