如何捕捉用虚拟键盘按下的键并在Android中禁用EditText?

问题描述:

我需要控制按下按钮,然后才能进入我的EditText小部件。它应该像过滤器一样工作。例如:我需要该用户只能用数字1,2,3,4,5填充EditText,其他符号必须被忽略。所以应该禁用虚拟键盘上的按钮部分,或者我需要抓住最后按下的符号,分析它并禁用EditText。如何捕捉用虚拟键盘按下的键并在Android中禁用EditText?

谁知道如何解决这个问题?

谢谢..

statusEdt.addTextChangedListener(new TextWatcher(){ 
     public void afterTextChanged(Editable s) {} 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) {} 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
      //do stuff 
      charTxt.setText(statusEdt.getText().length() + "/140"); 
     } 
    }); 

我用这个TextChangedListener(TextWatcher)保持的多少个字符计数已经输入到一个EditText的Twitter客户端我做了。你可以使用这样的监听器。你会想覆盖beforeTextChanged或onTextChanged。这些方法将传递给你任何CharSequence输入。你可以检查输入的内容,如果输入无效,你可以通过调用setText()来移除它,并且传入迄今输入的内容减去无效字符。

+0

是的,我知道.addTextChangedListener(TextWatcher)方法,而我使用它在我的应用程序。在我问这里一个问题之前,我尝试使用3个事件(afterTextChanged,beforeTextChanged,onTextChanged)和简单的检查方法来为每个人设置s =“asdf”,但是这个文本没有出现在我的EditText中。因此,我无法更改输入的值。此外,我真的试图做一个过滤器,当我这样键入符号是错误的,只是从EditText删除最后添加的符号。但是这个动作将EditText光标移动到第一个位置。 – Dimon

+0

这是错误的方式来检查最后添加的符号,导致用户可以移动光标,并在任何地方键入新的符号。这意味着我需要为整个字符串“扫描”错误的符号......这是困难的方式,我可以这样做,但我觉得这是错误的方式。我认为必须有更美丽和更短的方式来做到这一点...那为什么我在这里 – Dimon

你可能需要的是一个InputFilter。 例如只允许数字,符号和小数点:

editText.setFilters(DigistKeyListener.getInstance(true, true)); 
+0

你知道,你告诉我正确的方式来搜索我的问题的答案。我发现了一个详细的描述在这里http://*.com/questions/3349121/how-do-i-use-inputfilter-to-limit-characters-in-an-edittext-in-android – Dimon

+0

DigitsKeyListener.getInstance()可以工作,如果你只允许数字。 –