簡體   English   中英

如何禁用長按以打開帶有復制/粘貼/等功能的Android頂部菜單欄。 按鈕在Cordova Crosswalk應用中?

[英]How to disable long-click which opens the Android top menu bar with copy/paste/etc. buttons in Cordova Crosswalk apps?

如標題所示,我有一個Cordova應用程序,該應用程序安裝了Cordova Crosswalk插件並可以在Android和iOS上運行。

特別是在Android上,至少在Android 5.1.1和4.4.4版本上(以及可能由於Crosswalk而在所有版本上),每當我長按輸入字段時,我的WebView都會縮小高度並顯示出奇怪的樣式帶剪切/復制/粘貼/剪貼板按鈕的頂部欄,以及關閉頂部欄的“后退”按鈕:

Android剪切/復制/粘貼頂部欄

如何防止這種長按? 我嘗試在應用程序的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,該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

看起來這是Crosswalk中的錯誤,並且已提交修復它的PR:

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

在大多數情況下,要停止文本復制欄,您必須設置視圖的屬性:

focusable = false
clickable = false

除非您需要單擊視圖以執行某些操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM