1

XWalkView 内のリンクを長押ししても何も起こらないことに気付きました。Chromeで表示されるようなリンクの長押しを処理したい(青いリンクを長押ししたとき)。ダイアログを作成する方法をあなたから知る必要はありません。長押しイベントをインターセプトする方法を知りたいです。

(これはAndroid関連であることに注意してください)

そのために JavaScript を使用することは気にしませんが、動作する必要があります。

を使用してみましたonLongClickListenerが、そこから URL を取得できません。

現在のコードは次のとおりです。

//...
private static Handler handler = new Handler();
private static Runnable longPressRunnable = new Runnable() {
    @Override
    public void run() {
        Logging.logd("Long press detected");
    }
};
//...
public static final View.OnTouchListener
        mainOnTouchListener = new View.OnTouchListener() {
    //...
    @Override
    public boolean onTouch(View view, MotionEvent motionEvent) {
        switch(motionEvent.getAction()) {
            case MotionEvent.ACTION_DOWN:
                handler.postDelayed(longPressRunnable, 1200);
                //...
                break;
            case MotionEvent.ACTION_UP:
                handler.removeCallbacks(longPressRunnable);
                //...
                break;
            case MotionEvent.ACTION_MOVE:
                //...
                handler.removeCallbacks(longPressRunnable);
                break;
            default: break;
        }
    return false;
}

XWalkView はHitTestResultをサポートしていないことに注意してください。したがって、それを回答として使用するように言わないでください。

4

1 に答える 1

1

Actually it is not possible to do this only using a touch listener. I would have to handle it with javascript/jQuery or find another way around. I marked this as solved because I will get on my own way and this is not getting attention at all.

Update:

Crosswalk added it finally. You can find out how to do that here: https://github.com/xdevs23/Cornowser/blob/master/app/src/main/java/io/xdevs23/cornowser/browser/browser/xwalk/CrunchyWalkView.java#L109

Code snippet (excerpt from link above):

        // Thanks to chuan.liu (XWALK-7233) for the awesome example
        setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                XWalkHitTestResult result = ((CrunchyWalkView) v).getHitTestResult();
                XWalkHitTestResult.type resultType = result.getType();
                if(result.getExtra() == null) return false;
                switch (resultType) {
                    case IMAGE_TYPE:
                        onLongPress(result.getExtra(), result.getExtra(), true);
                        break;
                    case PHONE_TYPE:
                        break;
                    default:
                        onLongPress(result.getExtra(), result.getExtra(), false);
                        break;
                }
                return true;
            }
        });
于 2016-02-25T15:23:51.390 に答える