1

我有的

我有一个注册表单,我在其中使用TextWatcher. 我使用TextInputLayout支持库来突出显示错误

我的问题

当我在我的中输入不正确的数据时,我EditText的颜色TextInputLayout变为EditTextred

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

我试过的

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

也试过只改成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);
    }
4

1 回答 1

0

我在验证中使用如下 TextWatcher:

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;
            ...
        }
    }
}

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

inputName.addTextChangedListener(new RegisterTextWatcher(inputName));

我的验证:

public boolean emptyField(String editText, TextInputLayout textInputLayout, String errorMessage){

        if(editText.trim().isEmpty()){

            setLayoutError(textInputLayout, errorMessage);

            return false;

        }else{

            removeError(textInputLayout);
            return true;
        }
    }


private void setLayoutError(TextInputLayout textInputLayout, String error){

    if(!textInputLayout.isErrorEnabled()){
        textInputLayout.setErrorEnabled(true);
        textInputLayout.setError(error);
        textInputLayout.getEditText().setTextColor(context.getResources().getColor(android.R.color.holo_red_dark));
    }
}

private void removeError(TextInputLayout textInputLayout){
    if(textInputLayout.isErrorEnabled()){
        textInputLayout.setErrorEnabled(false);
        textInputLayout.getEditText().setTextColor(context.getResources().getColor(android.R.color.black));
    }
}
于 2016-01-19T07:58:39.093 回答