我有一个布局,其中有一些编辑文本和一个按钮。此按钮为 setEnabled(false)。当用户在edittext中写一些文本时,我如何改变他的状态?我想当用户输入一些文本来编辑文本按钮 setEnabled on true 时?
问问题
2108 次
4 回答
6
您需要使用TextWatcher
:
editText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
}
});
于 2012-10-30T11:49:04.063 回答
2
通知用户为什么禁用 Button也是一个好主意。
使用 aTextWatcher
禁用/启用按钮并为 EditText 设置错误提示:
mEditText.addTextChangedListener(new EmptyValidator());
private class EmptyValidator implements TextWatcher {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
if (editable.length() == 0) {
mEditText.setError("Required");
mButton.setEnabled(false);
} else {
mEditText.setError(null);
mButton.setEnabled(true);
}
}
}
于 2012-10-30T11:52:30.360 回答
1
关于您的代码和要求,以下代码应该可以正常工作:
mEditText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {}
@Override
public void afterTextChanged(Editable string) {
if(string.length() > 0) {
mButton.setEnabled(true);
} else {
mButton.setEnabled(false);
}
}
});
于 2012-10-30T11:53:34.420 回答
1
您需要检查 edittext 的当前长度以及从 TextWatcher 获得的 EditText 的最小长度 one(1) 或不为 null 然后 setEnabled(true); 否则默认为假。
检查条件:
editText.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// TODO Auto-generated method stub
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// TODO Auto-generated method stub
}
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
if(edt.getText().toString().length()<=0)
{
edt.setError("Required.");
btn.setEnable(true);
}
else
{
btn.setEnable(true);
}
}
});
于 2012-10-30T12:01:28.447 回答