我尝试通过window
if (this.name === "__blank__") {/*do stuff*/} else {/*do other stuff*/}
validate
输入Editext
,并TextWatcher
显示error
。
问题是,InputLayout
下次输入无效时,InputLayout错误不再显示。
我只想验证输入的端口,我希望它从2000到65535开始,我的布局显示为对话框。
InputLayout error is showing at the first time only
我已经尝试将其更改为,但它会起作用。
final Dialog dialog = new Dialog(PanelActivity.this,R.style.CustomDialog);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setCancelable(true);
dialog.setContentView(R.layout.port_layout);
final EditText ePort = (EditText) dialog.findViewById(R.id.input_port);
final TextInputLayout inputLayoutPort = (TextInputLayout)dialog.findViewById(R.id.input_layout_port);
ePort.addTextChangedListener(new 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) {
if(s.length() > 1){
if(Integer.parseInt(String.valueOf(s)) < 2000 || Integer.parseInt(String.valueOf(s)) > 65535){
inputLayoutPort.setError("Port must be 2000 to 65535.");
//Inputted port is incorrect
}else{
inputLayoutPort.setErrorEnabled(false);
.... //Inputted port is correct
}
}else{
inputLayoutPort.setError("Port must be 2000 to 65535.");
//Inputted port is incorrect
}
}
@Override
public void afterTextChanged(Editable s) {}
});
dialog.show();
但是,它仍然是第一次只显示输入无效。
这是我第一次使用InputLayout,我只是按照我发现的教程,但似乎我错过了一些东西,我无法弄清楚。
更新 以下代码适用于我的Inputlayout xml
... //onTextChanged
if(s.length() > 1){
if(Integer.parseInt(String.valueOf(s)) < 2000 || Integer.parseInt(String.valueOf(s)) > 65535){
inputLayoutPort.setError("Port must be 2000 to 65535.");
inputLayoutPort.setErrorEnabled(true);
//Inputted port is incorrect
}else{
inputLayoutPort.setErrorEnabled(false);
.... //Inputted port is correct
}
}else{
inputLayoutPort.setError("Port must be 2000 to 65535.");
inputLayoutPort.setErrorEnabled(true);
//Inputted port is incorrect
}
答案 0 :(得分:1)
我最近发现了同样的问题。
使用inputLayoutPort.setErrorEnabled(false)
使TextInputLayout
处于无法再次重新启用错误的状态。我不确定这是否是预期的行为,因为文档不清楚。
这样做的正确方法似乎只是调用inputLayoutPort.setError(null)
,因为这样可以清除错误。这个是记录的行为,所以我接受了。
答案 1 :(得分:0)
根据您的代码,您可以将onTextChanged()
简化为:
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
inputLayoutPort.setError("Port must be 2000 to 65535.");
if(s.length() > 1 && !(Integer.parseInt(String.valueOf(s)) < 2000 || Integer.parseInt(String.valueOf(s)) > 65535)) {
inputLayoutPort.setError(null);
}
}
所以,我设置了错误消息&#34; Port must be 2000 to 65535.
&#34;每次edittext中的文本都会发生变化。然后,结合您的两个条件s.length() > 1
和s lies between 2000 and 65535
,我通过将错误设置为null来删除错误消息。