Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android开发:如何使用onKeyUp?_Java_Android_Onkeyup - Fatal编程技术网

Java Android开发:如何使用onKeyUp?

Java Android开发:如何使用onKeyUp?,java,android,onkeyup,Java,Android,Onkeyup,我是Android开发新手,似乎找不到关于如何使用onKeyUp监听器的好指南 在我的应用程序中,我有一个大的EditText,当有人按下并释放该EditText中的一个键时,我想调用一个函数,该函数将在该EditText中执行正则表达式 我不知道我该如何使用onKeyUp。有人能告诉我怎么做吗?只是为了编辑文本。它是通过setOnClickListener()自身来实现的。无需使用onKeyUp()。因为这将通过单击/触摸事件执行。正确的?就这么做吧 edittext_object.setOn

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

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


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

只是为了编辑文本。它是通过
setOnClickListener()
自身来实现的。无需使用
onKeyUp()
。因为这将通过单击/触摸事件执行。正确的?就这么做吧

edittext_object.setOnClickListener(new OnClickListener() {
     public void onClick(View v) {
    //do what you need 
    }
}

在我脑海中写下这句话,但应该是以下几行:

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);
    }
});
更正:

有一段时间,我使用了一个通用的onkeylister。我很快发现我的代码被调用了两次。一次钥匙向下,一次钥匙向上。我现在使用下面的侦听器,只调用代码一次。
“if(event.getAction()==KeyEvent.ACTION\u 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;
};

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

正确的方法是使用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);

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

 @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方法。它在用户未按有效键时处理事件


对于更多的细节,你可以考虑如下。

< P>如果你使用的设备没有触碰,但是用硬键盘按钮(键盘)使用这个代码来控制左上向下移动的事件。使用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;
        }

他可能想在onkeyup期间做点什么,谢谢,我很久以前就遇到过TextWatcher课程了。一定是忘了标记正确的答案,对不起,浪费了你的时间!
    ‏       public boolean onKeyDown(int keyCode, KeyEvent event) {
        switch (keyCode) {
        ‏               case KeyEvent.KEYCODE_BACK:
        ‏                   actionLabel.setText("KEYCODE_BACK key pressed");
        ‏                   Toast.makeText(this, "Press again back for exit", Toast.LENGTH_SHORT).show();
        ‏                   counter++;
        ‏                   if (counter > 1) {
        ‏                       super.onBackPressed();
        ‏                   }
        ‏                   return true;
        ‏               case KeyEvent.KEYCODE_VOLUME_UP:
        ‏                   actionLabel.setText("VOLUME_UP key pressed");
        ‏                   return true;
        ‏               case KeyEvent.KEYCODE_VOLUME_DOWN:
        ‏                   actionLabel.setText("VOLUME_DOWN key pressed");
        ‏                   return true;
        ‏           }
        return super.onKeyDown(keyCode, event);
        ‏       }
    // catches the onKeyUp button event
    ‏       @Override
    ‏       public boolean onKeyUp(int keyCode, KeyEvent event) {
    ‏           switch (keyCode) {
    ‏               case KeyEvent.KEYCODE_BACK:
    ‏                   actionLabel.setText("KEYCODE_BACK key released");
    ‏                   return true;
    ‏               case KeyEvent.KEYCODE_VOLUME_UP:
    ‏                   actionLabel.setText("VOLUME_UP key released");
    ‏                   return true;
    ‏               case KeyEvent.KEYCODE_VOLUME_DOWN:
    ‏                   actionLabel.setText("VOLUME_DOWN key released");
    ‏                   return true;
    ‏           }
    ‏           return super.onKeyDown(keyCode, event);
    ‏       }
    // works for API level 5 and lower
    ‏       @Override
    ‏       public void onBackPressed() {
    ‏           actionLabel.setText("BACK key pressed");
    ‏           super.onBackPressed();
    ‏       }
    // catches the long press button event (longer than 2 seconds)
    ‏       @Override
    ‏       public boolean onKeyLongPress(int keyCode, KeyEvent event) {
    ‏           Toast.makeText(this, "Pressed for a long time", Toast.LENGTH_SHORT).show();
    ‏           return true;
    ‏       }
    // catches the on touch event on screen and shows the specific pixels
    ‏       // touched
    ‏       @Override
    ‏       public boolean onTouchEvent(MotionEvent event) {
    ‏           float x = event.getX();
    ‏           float y = event.getY();
    ‏           actionLabel.setText("Touch press on x: " + x + " y: " + y);
    ‏           return true;
    ‏       }}