如何在安卓设备上实现即时输入字母?

6
我在安卓应用中有一个EditText视图,我希望当用户输入一个字母时,应用程序能够获取该字母。这意味着需要一个监听器或事件处理程序来获取每个输入的字母。希望我的问题清楚明了。
6个回答

15
EditText et = (EditText) findViewById(R.id.EditText01);

        et.addTextChangedListener( new TextWatcher()
        {
            @Override
            public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {

                try
                {
                    char currentChar = arg0.charAt(arg1); // currently typed character
                }
                catch(Exception e)
                {
                    // error
                }
            }

            @Override
            public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                    int arg3) {

            }

            @Override
            public void afterTextChanged(Editable arg0) {

            }
        });

1
虽然try/catch也可以工作,但使用if语句(s.length() > start)将防止在使用退格键时语句崩溃。 - eager to learn

4

您可以使用方法TextView.addTextChangedListener(TextWatcher watcher)

TextWatcher提供了三个很好的方法:

public abstract void afterTextChanged (Editable s)

public abstract void beforeTextChanged (CharSequence s, int start, int count, int after)

public abstract void onTextChanged (CharSequence s, int start, int before, int count)

Here the doc


1
一个更简单的方法是只需像这样覆盖 onKeyDown()
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) 
{
    switch (keyCode) {
        case KeyEvent.KEYCODE_Q:
            // Do your thing here. 
            break;
    }
    return super.onKeyDown(keyCode, event);
}

0

Vikas的答案对我几乎有用,但还不够。这是我为了获得实际输入的字符所做的:

EditText et = ...;
et.addTextChangedListener(new TextWatcher() {
    @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { }

    @Override public void afterTextChanged(Editable editable) { }

    @Override public void onTextChanged(CharSequence s, int start, int count, int after) {
        if (s.length() > start + count) {
            char c = s.charAt(start + count);
            // do something ...
        }
    }
});

0
请查看EditText中的"setOnKeyListener"方法。

1
在我看来,使用虚拟键盘并不是非常有用。 - Francesco Laurita


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接