我有三个编辑文本。 第一个EditText名称没有特殊字符。当我输入任何特殊字符。我想显示错误不输入任何特殊字符。 当我离开第二个编辑文本时,我的光标在第三个编辑文本中。我想显示一个红色边框编辑文本。
答案 0 :(得分:1)
android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
在xml文件的edittext中使用上面的行,这样它只输入字母和数字
或
在edittext中添加textwatcher
yourEditText.addTextChangedListener(new TextWatcher() {
public void afterTextChanged(Editable s) {
// Here you need to check special character, if found then show error message
if (s.toString().contains("%"))
{
// Display error message
}
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
public void onTextChanged(CharSequence s, int start, int before, int count) {}
});
答案 1 :(得分:0)
将TextWatcher添加到EditText并应用识别特殊字符的条件(输入时),然后您可以在条件中设置
editText.setError("You cannot use Special Characters");
答案 2 :(得分:0)
您应该使用正则表达式来检查输入。这个link提供了文档并描述了您可能使用的模式。
对于您的情况,如果您只想使用文字字符:
public boolean isValid(String editTextInput){
boolean isInputValid = false;
String expression = "^[a-zA-Z]";
CharSequence inputStr = editTextInput;
Pattern pattern = Pattern.compile(expression, Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(inputStr);
if (matcher.matches()) {
isInputValid = true;
}
return isInputValid ;
}
您可以立即使用此方法。当您需要检查输入时,只需输入以下代码:
if(isValid(editText.getText().toString().trim()){
//valid
}else{
editText.setError("Can contain only text");
editText.setText("");
}
如果您想在用户进行新输入时立即查看,那么您必须实施interface
TextWatcher
并将其设置为EditText
。例如:
editText.addTextChangedListener(this);
@Override
public void beforeTextChanged(CharSequence s, int i, int i2, int count){}
@Override
public void onTextChanged(CharSequence s, int i, int i2, int count) {}
@Override
public void afterTextChanged(Editable editable) {
if(isValid(editText.getText().toString().trim()){
//valid
}else{
editText.setError("Only alphabet characters allowed");
editText.setText("");
}
}
同样很好的教程可以找到here。
答案 3 :(得分:0)
以下是一个示例,说明如何验证用户输入的EditText并相应地更新视图边框。
首先,将TextWater实现并附加到EditView,如下所示:
活动代码:
public class MainActivity extends ActionBarActivity {
EditText editText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = (EditText) findViewById(R.id.edittext);
// Attach TextWatcher
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) {
}
@Override
public void afterTextChanged(Editable editable) {
// A-Z, a-z, space
String pattern = "^([a-zA-Z ]*)$";
// Check for pattern match
if (!editable.toString().matches(pattern)) {
// Set red border
editText.setBackgroundResource(R.drawable.red_border);
} else {
// Restore default border
editText.setBackgroundResource(R.drawable.grey_border);
}
}
});
}
}
两个可绘制文件,用于在EditText周围绘制边框
/res/drawable/grey_border.xml
<?xml version="1.0" encoding="utf-8"?>
<shape
android:shape="rectangle"
xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#FFFFFF"/>
<stroke
android:width="2dp"
android:color="#000000"/>
</shape>
/res/drawable/grey_border.xml
<?xml version="1.0" encoding="utf-8"?>
<shape
android:shape="rectangle"
xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#FFFFFF"/>
<stroke
android:width="2dp"
android:color="#ff0000"/>
</shape>
最后是布局文件:
/res/layout/activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<EditText
android:padding="10dp"
android:layout_margin="10dp"
android:background="@drawable/grey_border"
android:id="@+id/edittext"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</RelativeLayout>