[英]How do I trigger any keycode key events in Android's webview?
例如,如果我希望網頁獲取鍵碼值為-1的事件,該怎么辦?
我嘗試使用webview.dispatchKeyEvent(...)
,但是如果KeyEvent
的值不在KeyEvent.KEYCODE_XXX
定義的常量中,則它將轉換為keyEvent.KEYCODE_UNKNOWN
。 即,頁面上接收到的事件鍵碼值為0
我該怎么辦?
API 19
Webview
和Crosswalk
都可以。
在javascript中,向窗口對象添加兩個函數: keyDown
和keyUp
。 在Java中,您可以在主要活動中覆蓋dispatchKeyEvent函數:
@Override
public boolean dispatchKeyEvent(KeyEvent event)
{
final int keyCode = event.getKeyCode();
final int keyAction = event.getAction();
if (keyAction == KeyEvent.ACTION_DOWN)
loadUrl("javascript:keyDown(" + keyCode + ")");
else if (keyAction == KeyEvent.ACTION_UP)
loadUrl("javascript:keyUp(" + keyCode + ")");
return true;
}
調整此功能以處理不支持的按鍵。 關鍵是,一旦您在Java中讀取了鍵,就可以在不傳遞“ 0”值的情況下調用自定義js函數。
就我而言:
@Override
public boolean dispatchKeyEvent(KeyEvent event)
{
final int keyCode = event.getKeyCode();
final int keyAction = event.getAction();
final boolean keySupported = KeyHelper.isKeySupported(keyCode);
if (keySupported)
{
if (keyAction == KeyEvent.ACTION_DOWN)
loadUrl("javascript:keyDown(" + keyCode + ")");
else if (keyAction == KeyEvent.ACTION_UP)
loadUrl("javascript:keyUp(" + keyCode + ")");
return true;
}
return super.dispatchKeyEvent(event);
}
其中isKeySupported
函數檢查我要處理的所有鍵的列表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.