【问题标题】:How to get the URL on long press using Crosswalk?如何使用 Crosswalk 长按获取 URL?
【发布时间】:2016-02-21 15:17:34
【问题描述】:

我注意到,当长按 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,所以不要告诉我用它作为答案。

【问题讨论】:

    标签: android url handler long-press crosswalk


    【解决方案1】:

    实际上,仅使用触摸侦听器是不可能做到这一点的。我将不得不用 javascript/jQuery 处理它或找到另一种方法。我将其标记为已解决,因为我会按照自己的方式行事,而这根本不会引起注意。

    更新:

    Crosswalk 终于添加了它。你可以在这里找到如何做到这一点:https://github.com/xdevs23/Cornowser/blob/master/app/src/main/java/io/xdevs23/cornowser/browser/browser/xwalk/CrunchyWalkView.java#L109

    代码 sn-p(摘自以上链接):

            // 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;
                }
            });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-29
      • 1970-01-01
      • 2011-06-16
      • 2013-11-17
      • 2023-03-16
      • 2015-02-22
      相关资源
      最近更新 更多