読者です 読者をやめる 読者になる 読者になる

ほげほげ(仮)

仮死状態

WebViewの長押しイベントについて(2.3以降)

Android


以前、WebViewの長押しについて書きましたが
2.3からどうも挙動が変わってるみたいなのでメモしておきます。
(ついでに前回の記事で一部ミスってたので修正しておきました。)


ざっと確認したところ、WebViewのどこを押しても長押しのイベントが走るみたいです。

確認するためのコードは以下のようになります。前回とほぼ一緒ですが。

mWebView.setOnLongClickListener(new View.OnLongClickListener() {
    @Override
    public boolean onLongClick(View view) {
        Log.d(TAG, "onLongClick");

        WebView webView = (WebView) view;
        WebView.HitTestResult hr = webView.getHitTestResult();

        Log.d(TAG, "HitTestResult.getType:" + hr.getType());
        Log.d(TAG, "HitTestResult.getExtra:" + hr.getExtra());

        return false;
    }

});

hr.getType()でどんな箇所を長押しされたか判定できるようになっています。
どういう値があるかはリファレンスを参照してください。
リファレンス:WebView.HitTestResult | Android Developers


空白の箇所とか文字の箇所を長押しした時にはhr.getExtra()はnullを返すようになっています。


あと、文字の箇所が選択できてクリップボードにもコピー出来るようになってました。
ただし、onLongClickでtrueを返すと選択できなくなりますので。


イベントが取得できるようになったのはいいことですが、以前ロジックとかも見直さないとダメっぽいですねぇ・・・


あ、ちなみに実機は無いのですべてエミュレーター上で確認しました。