Android WebView:如何使文本区域的上下文菜单工作?

时间:2011-11-15 22:01:17

标签: android webview contextmenu

向webview添加上下文菜单非常简单。但是,默认情况下,只有在单击链接或图像时才会弹出菜单,但不会在常规文本区域中弹出菜单。

我发现这个One建议将onLongClick添加到活动中,但我尝试了它并且它根本没有受到攻击。

// --------------------------------------------- ------------------

编辑:

我得到了一个相关问题的提示,我必须将webview子类化并覆盖一些函数。我似乎让上下文菜单工作。但是,webview的行为不正常。特别是,我不能再滚动视图了。我想我只是想念一些东西。非常感谢您的帮助。这是我的代码:

public class MyWebView extends WebView {
    WebViewerActivity _activity;
    Context _context;
    GestureDetector _gd;

    public MyWebView(Context context, AttributeSet attributeSet){
        super(context, attributeSet);
        this._context = context;
        _gd = new GestureDetector(context, sogl);
    }
    public void setActivity(WebViewerActivity activity){
        _activity = activity;
    }
    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        return _gd.onTouchEvent(ev);
    }
    GestureDetector.SimpleOnGestureListener sogl = new GestureDetector.SimpleOnGestureListener(){
        public boolean onDown(MotionEvent event) 
        {             
            return true;         
        }          
        public void onLongPress(MotionEvent event) 
        {             
            _activity.onLongClick(MyWebView.this);
        } 
    public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {         
        MyWebView.this.scrollBy((int)distanceX, (int)distanceY);
        return true;
    }
    };
}    

// --------------------------------------------- ------------------

更多编辑:

好的,我将onScroll的覆盖添加到SimpleOnGestureListener,如上所示,它使webview滚动工作。但是,如果将其滚动到外面太远,webview的原始滚动会自动反弹。但是,这种滚动没有这个很好的功能。知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

尝试使用WebView注册onLongClickListener。该视图可能正在消耗该事件,而不是将其传递回Activity。我假设通过使用Activity.registerForContextMenu()注册WebView来创建当前工作菜单?