第一次编辑文字输入字母验证
Edit text first time to input a letter validation
我正在创建一个应用程序来检查用户输入的是字母还是数字,然后会弹出一个按钮。如果用户没有输入单个字母,则会显示验证。
这是我正在尝试调试的示例[main activity。 PS。不是我的真实代码]:
private EditText edittext;
Button checkBtn;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
addKeyListener();
}
public void addKeyListener() {
edittext = (EditText) findViewById(R.id.editText);
checkBtn = (Button) findViewById(R.id.button1);
checkBtn.setVisibility(View.INVISIBLE);
edittext.setOnKeyListener(new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
if ((event.getAction() == KeyEvent.ACTION_DOWN)
&& (keyCode == KeyEvent.KEYCODE_ENTER)) {
checkBtn.setVisibility(View.VISIBLE);
return true;
else if ((event.getAction() == KeyEvent.ACTION_DOWN)
&& (keyCode == KeyEvent.KEYCODE_9)) {
// display a floating message
Toast.makeText(MyAndroidAppActivity.this,
"Number 9 is pressed!", Toast.LENGTH_LONG).show();
return true;
}
return false;
}
});
}
}
问题:
有没有办法让按钮在用户键入字母而不单击回车键时自动显示。如果用户没有输入字母,则会弹出验证提示无效,并且不会显示该按钮。
我试图寻找正确的答案,但还是找不到。
你,我的朋友,需要一个
EditText editText = (EditText)findViewById(R.id.edittext);
editText .addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
; //Do nothing
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
; //Do nothing
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
//TODO put your code here.
}
});
现在,只需检查 "s" 字符序列是否包含您的信件,您就可以上路了。
编辑:
获得该 CharSequence 后,只需检查第一个字符是否为字母即可。
要获取第一个字符,请执行
s.charAt(0); //Note: if there is nothing here, it could throw a null pointer.
字符 class 有一个静态函数,您可以使用它来查看它是否是一个字母(或数字、大写、小写、数字、数字或字母等),称为
Character.isLetter(char);
所以你可以做类似
的事情
public void onTextChanged(CharSequence s, int start, int before, int count) {
//Check to see that there is at least 1 char to look at.
//Then check to see if it is a letter.
//(Note: the && is AND, so both things have to be true)
if (s.length() > 0 && Character.isLetter(s.charAt(0))) {
; //Display your button
} else {
; //Display your error
}
}
有帮助吗?
您可以创建一个名为 MyTextWatcher 的新 class(或者在它自己的文件中,您可以将其导入到任何地方,或者作为 class 在 class 中(如果所有的编辑文本在同一个区域)),然后在里面做你现在擅长的常规事情:
public class MyTextWatcher 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) {
}
}
我个人更喜欢在包含编辑文本的 class 中执行此操作,但它可以放在一个单独的文件(您导入的文件)中,这样更易于重用。如果出于任何原因,您需要使用 TextWatcher 访问内容,您可以将它们作为构造函数传入。在 class 内部做事的好处是您不必将事情传递给构造函数。只是你要做的事情少了。但这是该构造函数的示例...
public class MyTextWatcher implements TextWatcher {
private Thing1 mThing1;
private Thing2 mThing2;
public MyTextWatcher(Thing1 t1, Thing2 t2) {
mThing1 = t1;
mThing2 = t2;
}
...
}
注意:这样做时请注意不要将事物链接太多。以后可能会长毛。 :)
试试这个我不确定这是否是您期望的确切解决方案。
button = (Button) findViewById(R.id.button1);
button.setVisibility(View.GONE);
editText.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(editText.getText().length() > 0 && !s.toString().equals("\n")){
button.setVisibility(View.VISIBLE);
}
else{
button.setVisibility(View.GONE);
Toast.makeText(MainActivity.this, "Invalid", Toast.LENGTH_SHORT).show();
}
}
@Override
public void afterTextChanged(Editable s) {
}
});
我正在创建一个应用程序来检查用户输入的是字母还是数字,然后会弹出一个按钮。如果用户没有输入单个字母,则会显示验证。
这是我正在尝试调试的示例[main activity。 PS。不是我的真实代码]:
private EditText edittext;
Button checkBtn;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
addKeyListener();
}
public void addKeyListener() {
edittext = (EditText) findViewById(R.id.editText);
checkBtn = (Button) findViewById(R.id.button1);
checkBtn.setVisibility(View.INVISIBLE);
edittext.setOnKeyListener(new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
if ((event.getAction() == KeyEvent.ACTION_DOWN)
&& (keyCode == KeyEvent.KEYCODE_ENTER)) {
checkBtn.setVisibility(View.VISIBLE);
return true;
else if ((event.getAction() == KeyEvent.ACTION_DOWN)
&& (keyCode == KeyEvent.KEYCODE_9)) {
// display a floating message
Toast.makeText(MyAndroidAppActivity.this,
"Number 9 is pressed!", Toast.LENGTH_LONG).show();
return true;
}
return false;
}
});
}
}
问题: 有没有办法让按钮在用户键入字母而不单击回车键时自动显示。如果用户没有输入字母,则会弹出验证提示无效,并且不会显示该按钮。
我试图寻找正确的答案,但还是找不到。
你,我的朋友,需要一个
EditText editText = (EditText)findViewById(R.id.edittext);
editText .addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
; //Do nothing
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
; //Do nothing
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
//TODO put your code here.
}
});
现在,只需检查 "s" 字符序列是否包含您的信件,您就可以上路了。
编辑: 获得该 CharSequence 后,只需检查第一个字符是否为字母即可。
要获取第一个字符,请执行
s.charAt(0); //Note: if there is nothing here, it could throw a null pointer.
字符 class 有一个静态函数,您可以使用它来查看它是否是一个字母(或数字、大写、小写、数字、数字或字母等),称为
Character.isLetter(char);
所以你可以做类似
的事情 public void onTextChanged(CharSequence s, int start, int before, int count) {
//Check to see that there is at least 1 char to look at.
//Then check to see if it is a letter.
//(Note: the && is AND, so both things have to be true)
if (s.length() > 0 && Character.isLetter(s.charAt(0))) {
; //Display your button
} else {
; //Display your error
}
}
有帮助吗?
您可以创建一个名为 MyTextWatcher 的新 class(或者在它自己的文件中,您可以将其导入到任何地方,或者作为 class 在 class 中(如果所有的编辑文本在同一个区域)),然后在里面做你现在擅长的常规事情:
public class MyTextWatcher 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) {
}
}
我个人更喜欢在包含编辑文本的 class 中执行此操作,但它可以放在一个单独的文件(您导入的文件)中,这样更易于重用。如果出于任何原因,您需要使用 TextWatcher 访问内容,您可以将它们作为构造函数传入。在 class 内部做事的好处是您不必将事情传递给构造函数。只是你要做的事情少了。但这是该构造函数的示例...
public class MyTextWatcher implements TextWatcher {
private Thing1 mThing1;
private Thing2 mThing2;
public MyTextWatcher(Thing1 t1, Thing2 t2) {
mThing1 = t1;
mThing2 = t2;
}
...
}
注意:这样做时请注意不要将事物链接太多。以后可能会长毛。 :)
试试这个我不确定这是否是您期望的确切解决方案。
button = (Button) findViewById(R.id.button1);
button.setVisibility(View.GONE);
editText.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(editText.getText().length() > 0 && !s.toString().equals("\n")){
button.setVisibility(View.VISIBLE);
}
else{
button.setVisibility(View.GONE);
Toast.makeText(MainActivity.this, "Invalid", Toast.LENGTH_SHORT).show();
}
}
@Override
public void afterTextChanged(Editable s) {
}
});