Android与webview JS 键值编码差异

Android针对键盘相关的按键做了自己的编码,相关的定义可以查看SDK API官方资料:

http://developer.android.com/reference/android/view/KeyEvent.html

 

也可以在activity中通过覆盖onKeyDown函数来获取,例如:

 

	@Override 
	//按键处理
	public boolean onKeyDown(int keyCode, KeyEvent event){
		int valKey = 0;
		// KeyEvent event1;
		System.out.println("Activity KEY:");	
		System.out.println(keyCode);
                  System.out.println(event.getKeyCode());	
		return super.onKeyDown(keyCode, event);
	}


其中,函数内部keyCode和event.getKeyCode()是一样的!

 

如果使用webview访问web,里面的JS获取的按键是有自己的编码的。可以在JS里把信息打印出来对比:

document.onkeydown = keyDown 
function keyDown(event) { 
 	var key_code = event.keyCode;
	alert(key_code);
}


例如,针对光标方向键,webview接收到的key为,19,20,21,22。传递到JS时,打印出来38,39,40,41。这点其实不用担心,

内部自己会转换的。

 

针对与方向键,webview的源码内会默认先预处理。比如,如果HTML页面如果没有什么可以响应的,就会返回给activity来处理。

好像JS里的onkeydown获取不到方向的按键。除非覆盖webview的getKeyCode(),例如:

 

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

	}
}


用webview开发时,可能常碰到这种问题,这里先备忘一下~~~~

 

 

你可能感兴趣的:(Android)