【问题标题】:How to disable Copy but enable Paste in a WebView?如何在 WebView 中禁用复制但启用粘贴?
【发布时间】:2020-04-06 09:41:27
【问题描述】:

我正在使用 WebView 在我的移动 Android 应用上显示我的网站。我在 WebView 中禁用了文本选择,因为我想禁用复制。

我实际上希望允许用户粘贴文本而不是复制。

请问我该怎么做?


    public class MainActivity extends AppCompatActivity {


    WebView webview;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);

        webview = findViewById(R.id.webView);
        webview.setWebViewClient(new WebViewClient(){

            public boolean shouldOverrideUrlLoading(WebView view, String url) {

                String host = Uri.parse(url).getHost();
                String domain = "www.google.fr";

                if (host.equals(domain)) {
                    // This is my website, so do not override; let my WebView load the page
                    return false;
                } else {
                    view.getContext().startActivity(
                            new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
                    return true;
                }
            }


        });

        webview.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                return true;
            }
        });
        WebSettings webSettings = webview.getSettings();
        webSettings.setJavaScriptEnabled(true);
        webview.loadUrl("https://www.google.fr");

    }

    @Override
    public void onBackPressed() {
        if (webview.canGoBack()) {
            webview.goBack();
        }
    }
}

【问题讨论】:

    标签: android webview android-webview


    【解决方案1】:

    如您所知,要复制文本,您需要长按选择。

    所以请向 webview 添加一个 longClickListener,它会在长按时显示任何其他内容,而不是复制文本。

    mWebView.setOnLongClickListener(new OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
            return true;
        }
    });
    mWebView.setLongClickable(false);
    

    但这也将禁用使用 PASTE 以便从剪贴板粘贴内容。我建议在它旁边添加一个小按钮,并在其中添加一个 onClickListener,它将复制的内容粘贴到您想要的任何位置。

    ClipboardManager mClipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
    String pasteData = "";
    if (!(mClipboard.hasPrimaryClip())) {
    
    } else if (!(mClipboard.getPrimaryClipDescription().hasMimeType(MIMETYPE_TEXT_PLAIN))) {
    } else {
        ClipData.Item item = mClipboard.getPrimaryClip().getItemAt(0);
    
        copiedText = item.getText().toString(); 
    }
    

    【讨论】:

    • 谢谢,但这并没有改变任何东西。文本仍然无法选择,复制被禁用,但我无法粘贴。我能做些什么来只禁用 LongClick Listener 中的 Copy ?谢谢
    • @JojoRaoul 我可能已经添加了一个带有粘贴图标的额外按钮并为其设置了一个 onClickListener。我在更新的答案中提到了这一点。
    猜你喜欢
    • 2012-05-21
    • 1970-01-01
    • 2010-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多