有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Android开发:如何使用onKeyUp?

我是Android开发新手,似乎找不到关于如何使用onKeyUp监听器的好指南

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

我不知道我该如何使用onKeyUp。有人能告诉我怎么做吗


共 (6) 个答案

  1. # 1 楼答案

    如果您使用不带触摸但带有硬键盘按钮(键盘)的设备,请使用此代码控制左右上下移动和ok的事件。使用onkeyDown而不是onKeyUp,因为onKeyUp将返回下一个按钮事件:

            Button myButton = (Button) findViewById(R.id.my_btn);
            myButton .setKeyListener(new KeyListener() {
            @Override
            public int getInputType() {
                return 0;
            }
    
            @Override
            public boolean onKeyDown(View view, Editable editable, int keyCode, KeyEvent keyEvent) {
                Log.d("myTag", "onKeyDown code: " +keyCode);
                switch (keyCode) {
                    case KeyEvent.KEYCODE_DPAD_RIGHT:
                        // USER_MOVE_RIGHT();
                        return true;
                    case KeyEvent.KEYCODE_DPAD_LEFT:
                        //USER_MOVE_LEFT());
                        return true;
                    case KeyEvent.KEYCODE_DPAD_DOWN:
                        //USER_MOVE_DOWN());
                        return true;
                    case KeyEvent.KEYCODE_DPAD_UP:
                        //USER_MOVE_UP();
                        return true;
                    case KeyEvent.KEYCODE_DPAD_CENTER:
                        //USER_Press_OK()
                        return true;
                                   }
                return false;
            }
    
  2. # 2 楼答案

    写下这句话,但应该是以下几行:

    text.setKeyListener(new KeyListener() {
        @Override
        public boolean onKeyUp(int keyCode, KeyEvent event) {
    
    
            if(keyCode == KeyEvent.KEYCODE_0) dosomething // pick the custom key from keyEvent
    
    
            return super.onKeyUp(keyCode, event);
        }
    });
    
  3. # 3 楼答案

    更正:

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

    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()

    例如:

    public boolean onKeyUp(int keyCode, KeyEvent event) {
        //do something here
        return false;
    };
    

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

  4. # 4 楼答案

    只是为了一个EditText。它是通过setOnClickListener()自身实现的。不需要onKeyUp()。因为这将通过点击/触摸事件执行。正当就这么做吧

    edittext_object.setOnClickListener(new OnClickListener() {
         public void onClick(View v) {
        //do what you need 
        }
    }
    
  5. # 5 楼答案

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

     @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);
        } }
    

    最后,我们称之为超级。onkeyUp方法。当用户未按有效键时,它将处理事件

    对于更多的细节,您可以考虑^ ^ a1}。

  6. # 6 楼答案

    正确的方法是使用TextWatcher类

    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);