【问题标题】:Count characters with TextWatcher fails on HTC longpress在 HTC longpress 上使用 TextWatcher 计数字符失败
【发布时间】:2012-03-08 15:21:46
【问题描述】:

我有 3 个 EditText 元素,如果输入中有 4 个字符,我想从一个字段跳到下一个字段。

我为此使用了 TextWatcher:

getEditView(R.id.edit_code1).addTextChangedListener(new TextWatcher() {
    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {}

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {}

    @Override
    public void afterTextChanged(Editable input) {
        if(input.length() == 4){
            getEditView(R.id.edit_code2).requestFocus();
        }
    }
});

EditText 的 inputType 是“textCapCharacters”

当长按某个键获取数字时,例如按住 R 获取 4,大多数设备不会添加字母,直到用户停止按住按钮,并在选择字母 4 后触发 afterTextChanged。在 HTC 键盘上(在这种情况下是 2.3.5 上的 HTC Desire),情况并非如此。即使用户仍然按住按钮,R 也会添加到 EditText 并触发 afterTextChanged,代码完成其工作并将焦点放在下一个字段上。

如何防止这种不良行为?观看 onKeyDown/Up 也无济于事,因为它不会记录正常的击键。

【问题讨论】:

    标签: java android android-edittext textwatcher


    【解决方案1】:
           getEditView(R.id.edit_code1).addTextChangedListener(new TextWatcher() {
    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {}
      if(input.length() >3){
            getEditView(R.id.edit_code2).requestFocus();
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
    
    @Override
    public void afterTextChanged(Editable input) {
    
        }
    }
    

    });

    【讨论】:

    • 所有 3 个事件侦听器 onTextChanged、beforeTextChanged、afterTextChanged 在按下一个键后立即触发,因为在编辑文本中添加了一个字母。问题是键盘软件的实现并没有等待用户释放键并选择一个数字,然后添加它,并调用所有事件监听器
    【解决方案2】:

    不幸的是,这是 HTC 键盘中的一个错误,无法修复。这是 IME 中的一个事件,不可能拦截触摸或按键事件,因此您最好让用户跳到下一个输入而不是您为他们做这件事。

    如果它对你来说很重要,你可以在那里实现你自己的键盘,只需要你需要的键。

    【讨论】:

    • 这就是我害怕的,谢谢,我会把选择权留给客户。无论如何,在 HTC 键盘上总是可以使用数字输入而不是长按。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-12
    • 1970-01-01
    • 2016-02-12
    相关资源
    最近更新 更多