WebView 長押しコピーの実現方法が、今のところ、長押しした行の端までを
選択ハイライトにする方法を思いつくのがやっと。
長押しした周りの単語やフレーズだけを選択ハイライトしたいのだが。。。。
グローバル変数で長押し位置取得変数を宣言する。
float x_touch;
float y_touch;
WebView webview;
------------------------
Activity の onCreate で、画面サイズを予め取得、、
WindowManager windowmanager = (WindowManager)getSystemService(WINDOW_SERVICE);
Display disp = windowmanager.getDefaultDisplay();
final int screen_width = disp.getWidth();
セットしている WebViewClient の ページ読込開始で、WebView タッチを禁止しているなら
ページ読込終了でタッチ位置を取得→float x_touch , float y_touch
@Override
public void onPageFinished(WebView view,String url){
super.onPageFinished(view,url);
view.setOnTouchListener(new View.OnTouchListener(){
@Override
public boolean onTouch(View v,MotionEvent event){
x_touch = event.getX();
y_touch = event.getY();
return false;
}
});
}
WebView の長押し設定で画面サイズ、タッチ時のY軸で MotionEvent を発行するようにする
webview.setOnLongClickListener(new View.OnLongClickListener(){
@Override
public boolean onLongClick(View v){
WebView.HitTestResult hitTestResult = ((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 );
webview.dispatchTouchEvent(MotionEvent.obtain(0,0,KeyEvent.ACTION_DOWN,0,y_touch,KeyEvent.KEYCODE_SHIFT_LEFT));
webview.dispatchTouchEvent(MotionEvent.obtain(0,0,KeyEvent.ACTION_DOWN,screen_width,y_touch,KeyEvent.KEYCODE_SHIFT_LEFT));
}catch(Exception e){
}
return true;
}
return false;
}
});