【问题标题】:How to catch key pressed with the virtual keyboard and disable it for EditText in Android?如何捕捉用虚拟键盘按下的键并在 Android 中为 EditText 禁用它?
【发布时间】:2011-09-20 23:45:53
【问题描述】:

我需要控制按下的按钮,然后才能将它们转到我的 EditText 小部件。它应该像过滤器一样工作。 例如:我需要用户只能用数字 1、2、3、4、5 填充 EditText,其他符号必须被忽略。所以应该禁用虚拟键盘上的按钮部分,否则我需要捕捉最后按下的符号,分析它并禁用 EditText。

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

谢谢..

【问题讨论】:

    标签: android keyboard key virtual try-catch


    【解决方案1】:
        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) 来记录我为我创建的 Twitter 客户端在 EditText 中输入了多少字符。您可能可以使用这样的侦听器。您需要覆盖 beforeTextChanged 或 onTextChanged。这些方法将传递您输入的任何 CharSequence。您可以检查输入的内容,如果输入无效,您可以通过调用 setText() 并传入迄今为止输入的内容减去无效字符来删除它。

    【讨论】:

    • 是的,我知道 .addTextChangedListener(TextWatcher) 方法,我在我的应用程序中使用它。在我在这里问一个问题之前,我通过实验尝试使用 3 个事件(afterTextChanged、beforeTextChanged、onTextChanged),并为每个人设置了简单的检查方法 s = "asdf",但此文本不会出现在我的 EditText 中。结果,我无法更改键入的值。此外,我真的尝试做一个过滤器,当我输入的符号错误时,只是从 EditText 中删除了最后添加的符号。但是这个动作将 EditText 光标移动到第一个位置。
    • 检查最后添加的符号的方法是错误的,因为用户可以移动光标并在任何地方输入新符号。这意味着我每次都需要“扫描”整个字符串中的“错误”符号......这很困难,我可以做到,但我觉得这是错误的方式。我认为必须有更美丽和更短的方法来做到这一点......这就是我在这里的原因
    【解决方案2】:

    您可能需要的是InputFilter。 例如只允许数字、符号和小数点:

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

    【讨论】:

    • 您知道,您向我展示了搜索问题答案的正确方法。我在这里找到了详细的描述stackoverflow.com/questions/3349121/…
    • DigitsKeyListener.getInstance() 如果您只允许数字,则可以工作。
    猜你喜欢
    • 2012-09-30
    • 1970-01-01
    • 2010-12-12
    • 2021-04-20
    • 2012-07-09
    • 2011-01-16
    • 2015-08-24
    • 2014-09-27
    • 2013-05-15
    相关资源
    最近更新 更多