5

I have a simple WebView application which I want to control with the keyboard. Is it possible to catch arrow keys in Javascript?

I have tried the following code without any luck:

function handleArrowKeys(evt) {
    console.info('key');                                                                                         
}

document.onkeyup = handleArrowKeys;
document.onkedown = handleArrowKeys;
document.onkepress = handleArrowKeys;

Javascript is enabled in the webview

WebSettings webSettings = webview.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setDomStorageEnabled(true);
4
  • Have you tried document.body.onkeydown etc? Commented Apr 16, 2012 at 12:08
  • Yes and I do get key events from normal keys but no events from the arrow keys. The WebView does not trigger those. Commented Apr 17, 2012 at 10:16
  • I have found shouldOverrideKeyEvent the WebViewClient. I think this is going to the right direction Commented Apr 17, 2012 at 10:58
  • OK, cool. onkeypress will never trigger for arrow keys, incidentally. You have to use down/up for special keys. Commented Apr 17, 2012 at 15:14

1 Answer 1

4

You should overwrite the onKeyDown method of WebView. See: http://blog.csdn.net/focusxi/article/details/6780965

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event){
    int valKey = 0;
    System.out.println("Web KEY:"); 
    System.out.println(keyCode);    

    switch(keyCode){
        //UP
        case 50:
        case 19:
            valKey = 19;
            break;
        //DOWN
        case 83:
        case 20:
            valKey = 20;        
            break;
        //LEFT
        case 81:
        case 21:
            valKey = 21;
            break;
        //RIGHT
        case 69:
        case 22:
            valKey = 22;    
            break;
    }

    if (valKey!=0)
    {
        //new KeyEvent(KeyEvent.ACTION_DOWN,KeyEvent.KEYCODE_SHIFT_LEFT);
        KeyEvent event1 = new KeyEvent(KeyEvent.ACTION_DOWN, valKey);

        System.out.println(event1.getKeyCode());    

        return super.onKeyDown(38, event1);
    }
    else
    {
        return super.onKeyDown(keyCode, event);
    }

}
}
Sign up to request clarification or add additional context in comments.

2 Comments

You have to write in javascript document.onkeydown = function(event){ //do something }; For me I couldnt use jquery $(document).on("keydown"). to be able to listen this on javascript thanks this actually works
crashes when an <input> field has focus.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.