WebView#emulateShiftHeld() は、Android 2.2 から公開 API になっているのに、
公式API ドキュメントでは、将来廃止される想定の Deprecate になっている。
WebView の画面View上、長押しでクリップボードコピーするのに、多くのサイトで紹介されてる
KeyEvent.ACTION_DOWN と、KeyEvent.KEYCODE_SHIFT_LEFT によるキーイベントを
ディスパッチする(イベントの割り振る)しかないのか。。。
サンプルは以下のように、、
WebView webview;
:
webview.setOnLongClickListener(new View.OnLongClickListener(){
@Override
public boolean onLongClick(View v){
WebView.HitTestResult hitTestResult = *1;
上の shiftPressEvent.dispatch 実行後にこれを実行すれば良いのだろうか?
それに、x , y はどう指定するのだろうか?
*1:WebView)v).getHitTestResult();
if (hitTestResult.getType()==WebView.HitTestResult.UNKNOWN_TYPE){
try{
KeyEvent shiftPressEvent = new KeyEvent(0,0,KeyEvent.ACTION_DOWN,KeyEvent.KEYCODE_SHIFT_LEFT,0,0);
shiftPressEvent.dispatch(webview);
}catch(Exception e){
}
return true;
}
return false;
}
}
----------------------
しかし、この方法でも、もしくは、、WebView#emulateShiftHeld() を使ったとしても、テキスト部分を長押ししただけ
では、選択文字列がハイライトにならず、小さい見落としそうな矢印カーソルが出現するだけだ。
android.view.MotionEvent の
obtain(long downTime, long eventTime, int action, float x, float y, int metaState)
メソッドを使って、選択させる位置まで KeyEvent.ACTION_DOWN+KeyEvent.KEYCODE_SHIFT_LEFT の
MotionEvent を作成して、Webview の dispatchTouchEvent で指定すれば良いのだろうか?
webview.dispatchTouchEvent(MotionEvent.obtain(downTime,eventTime,KeyEvent.ACTION_DOWN
,x,y
,KeyEvent.KEYCODE_SHIFT_LEFT