首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓开发:如何使用onKeyUp?

安卓开发:如何使用onKeyUp?
EN

Stack Overflow用户
提问于 2010-09-18 17:47:47
回答 7查看 45.4K关注 0票数 19

我是Android开发的新手,似乎找不到一个好的指南来指导我如何使用onKeyUp监听器。

在我的应用程序中,我有一个很大的EditText,当有人在该EditText中按下并释放一个键时,我想调用一个函数,该函数将在该EditText中执行正则表达式。

我不知道我该怎么用onKeyUp。有没有人可以教我怎么做?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2011-08-27 04:12:18

最正确的方法是使用TextWatcher类。

代码语言:javascript
复制
EditText tv_filter = (EditText) findViewById(R.id.filter);

TextWatcher fieldValidatorTextWatcher = new TextWatcher() {
        @Override
        public void afterTextChanged(Editable s) {
        }

        @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 (filterLongEnough()) {
                populateList();
            }
        }

        private boolean filterLongEnough() {
            return tv_filter.getText().toString().trim().length() > 2;
        }
    };
    tv_filter.addTextChangedListener(fieldValidatorTextWatcher);
票数 33
EN

Stack Overflow用户

发布于 2011-02-19 01:05:24

更正:

有一段时间,我使用了通用的onKeyListener.我很快就发现我的代码被调用了两次。一次按键按下,一次按键向上。我现在使用下面的侦听器,并且只调用一次代码。"if (event.getAction() == KeyEvent.ACTION_UP)"是关键。

代码语言:javascript
复制
OnKeyListener keyListener = new OnKeyListener() {

    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        if (event.getAction() == KeyEvent.ACTION_UP) {
            //do something here
        }
        return false;
    }
};

我发现活动中的每个控件都会自动调用onKeyUp()。如果这是您想要的,请像添加onCreate()一样将其添加到活动中

示例:

代码语言:javascript
复制
public boolean onKeyUp(int keyCode, KeyEvent event) {
    //do something here
    return false;
};

我知道这是一个老生常谈的问题,但也许这会对其他人解决同样的问题有所帮助。

票数 12
EN

Stack Overflow用户

发布于 2016-07-16 23:24:24

您可以考虑使用以下代码:

代码语言:javascript
复制
 @Override 
 public boolean onKeyUp(int keyCode, KeyEvent event) {
    switch (keyCode) {
        ...
        case KeyEvent.KEYCODE_J:
            if (event.isShiftPressed()) {
                fireLaser();
            } else {
                fireMachineGun();
            }
            return true;
        case KeyEvent.KEYCODE_K:
            if (event.isShiftPressed()) {
                fireSeekingMissle();
            } else {
                fireMissile();
            }
            return true;
        default:
            return super.onKeyUp(keyCode, event);
    } }

在这里,我们最终调用了super.onkeyUp方法。它处理用户未按下有效键时的事件。

有关更多详细信息,您可以考虑使用link

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3741147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档