如何禁用长按,打开Android顶部菜单栏并复制/粘贴/等。 Cordova Crosswalk应用程序中的按钮?

时间:2015-08-11 18:31:40

标签: javascript android cordova crosswalk-runtime

正如标题所说,我有一个Cordova应用程序,它安装了Cordova Crosswalk插件并在Android和iOS上运行。

特别是在Android上,至少在Android 5.1.1和4.4.4版本上(并且很可能是由于Crosswalk),每当我长按输入字段时,我的WebView会缩小高度并显示带有剪切/复制/粘贴/剪贴板按钮的奇怪风格的顶栏,以及关闭顶栏的“后退”按钮:

Android cut/copy/paste top bar

如何防止此长按?我尝试在我的应用程序的MainActivity.java中的WebView上添加onLongClickListener并调用setLongClickable(false),如下所示:

public class MainActivity extends CordovaActivity {
    private static final String TAG = MainActivity.class.getSimpleName();

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Set by <content src="index.html" /> in config.xml
        loadUrl(launchUrl);

        // disable the context menu and all long clicks
        super.getView().setOnLongClickListener(new View.OnLongClickListener() {
            public boolean onLongClick(View v) {
            return true;
            }
        });
        super.appView.getView().setLongClickable(false);
        Log.i(TAG, "setLongClickable false");
    }
}

它似乎没有任何效果。我还添加了以下CSS规则:

* {
    -webkit-text-size-adjust: none !important;
    -webkit-touch-callout: none !important;
    -webkit-user-select: none !important;
    user-select: none !important;
  }

这也没有效果。

我还尝试了以下Javascript,它在任何视图渲染之前运行(使用Backbone / Marionette / Handlebars)(#viewport是体内第一个div元素):

  function stopEvent(e) {
    e.preventDefault();
    e.stopPropagation();
    return false;
  }

  window.oncontextmenu = function (e) {
    return stopEvent(e);
  };

  window.onselectstart = function(e) {
    return stopEvent(e);
  };
  window.ondragstart = function(e) {
    return stopEvent(e);
  };

  $('#viewport').on('taphold', function(e) {
    console.log("taphold");
    e.preventDefault();
    e.stopPropagation();

    return false;
  });

再次,没有效果。

我几乎可以肯定这是由于Cordova Crosswalk WebView,因为删除插件后,行为消失了:长按没有任何反应。 Crosswalk WebView可能忽略了setLongClickable / setOnLongClickListener方法调用吗?也许我还需要另外一个“隐藏”的WebView来调用这些方法吗?

如何禁用顶栏?我不介意编辑Cordova或Crosswalk Java源代码。感谢。

编辑:也许这是相关的? https://crosswalk-project.org/jira/browse/XWALK-4786

2 个答案:

答案 0 :(得分:0)

看起来这是Crosswalk中的一个错误,修复它的PR已经提交:

https://github.com/crosswalk-project/crosswalk/pull/3193

答案 1 :(得分:0)

在大多数场景中,要停止文本复制栏,您必须设置视图的属性:

focusable = false
clickable = false

除非您需要点击视图以执行某些操作。