Android:禁用网页视图中的文本选择

     2023-05-07     24

关键词:

【中文标题】Android:禁用网页视图中的文本选择【英文标题】:Android: Disable text selection in a webview 【发布时间】:2011-07-03 17:17:08 【问题描述】:

我正在使用 webview 在我的应用程序中呈现一些格式化的内容。对于某些交互(特定于某些 dom 元素),我使用 javascript 和WebView.addJavascriptInterface()。现在,我想识别长触摸。不幸的是,onLongTouch,在 Android 2.3 中显示了文本选择的句柄。

如何在不设置onTouchListener 的情况下关闭此文本选择 并返回true? (然后,与“网站”的交互就不再起作用了。

【问题讨论】:

对于那些想通过自定义View.OnTouchListener、see this related question 处理(例如禁用)所有触摸事件的人。 【参考方案1】:

这对我有用

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

我没测试过,如果不想长按引起的震动,可以试试这个:

mWebView.setHapticFeedbackEnabled(false);

【讨论】:

这仍然会产生轻微的振动(但没有上下文操作栏)。 mWebView.setLongClickable(false);没有什么不同,但是设置长点击监听器并从 onLongClick() 方法传递 true 对我有用。 这对我有用,但我不需要最后一行“mWebView.setLongClickable(false);” mWebView.setOnLongClickListener(v -> true); mWebView.setLongClickable(false); 这工作正常,但如果我们双击文本字段中的内容,选择和复制选项将被启用。如何禁用此功能?【参考方案2】:

将 webkit css 属性 -webkit-user-select 设置为 none 可以解决问题。

禁用选择的示例 CSS:

* 
   -webkit-user-select: none;

【讨论】:

这实际上是防止选择的最佳解决方案,因为它是跨平台的。 不幸的是,这不适用于所有版本的 Android。它应该是最好的解决方案,但它不是:/ *:not(input):not(textarea) webkit-user-select: none; 非常感谢,为了让它与 android 一起工作,我将其更改为 ' webkit-user-select: none;用户选择:无; '【参考方案3】:

我想通了!!这就是您可以实现自己的 longtouchlistener 的方式。在 longTouch 函数中,您可以调用您的 javascript 界面。

var touching = null;
$('selector').each(function() 
    this.addEventListener("touchstart", function(e) 
        e.preventDefault();
        touching = window.setTimeout(longTouch, 500, true);
    , false);
    this.addEventListener("touchend", function(e) 
        e.preventDefault();
        window.clearTimeout(touching);
    , false);
);

function longTouch(e) 
    // do something!

这行得通。

【讨论】:

我的问题仍然存在:touchstart 事件中的event.preventDefault() 调用也阻止了正常的光标模式输入/选择(在 html textinput 元素上)。 这是真的...也许关闭 android 层上的所有长触摸事件并删除 preventDefaults 是否有效? 这种行为让我感到困惑..为每个 onTouch 事件返回 true 似乎都有效,但是当我只选择某些(长)移动和向下事件以跳过进一步传播时,我会遇到一些状态,我在取消文本选择之前不要收到任何事件(例如)输入元素更改。文本选择似乎也在向下和(未来)向上事件之间触发。也许我错过了另一种可以取消的事件类型.. 我发现这会破坏浏览器中的任何滚动。例如,如果您将手指放在selector 元素上并尝试上下滚动,则不会发生任何事情。 @EMMERICH,我遇到了同样的问题,它打破了滚动。是否有任何解决方案可以防止以本机方式选择文本?【参考方案4】:

如果您使用过,通过长按剪切/粘贴似乎已关闭

    articleView.setWebChromeClient(new WebChromeClient()...)

见https://bugzilla.wikimedia.org/show_bug.cgi?id=31484

因此,如果您使用 setChromeClient 并且希望长按开始复制/粘贴,请执行以下操作:

    webView.setWebChromeClient(new WebChromeClient()

        [.... other overrides....]

        // @Override
        // https://bugzilla.wikimedia.org/show_bug.cgi?id=31484
        // If you DO NOT want to start selection by long click,
        // the remove this function
        // (All this is undocumented stuff...)
        public void onSelectionStart(WebView view) 
            // By default we cancel the selection again, thus disabling
            // text selection unless the chrome client supports it.
            // view.notifySelectDialogDismissed();
        

    );

【讨论】:

我需要在我的 web 视图中具有复制/粘贴功能。我使用 setWebChromeClient 使用 onProgressChanged 方法进行进度条更新。这禁用了复制/粘贴功能。添加 onSelectionStart 方法再次启用复制/粘贴。非常感谢这个隐藏的宝石! API中没有这个方法,你们在说什么? developer.android.com/reference/android/webkit/… 这也让我一头雾水,你说的是什么安卓系统? 他们指的是一个“隐藏”的 API 方法:bugzilla.wikimedia.org/show_bug.cgi?id=31484#c15 因此它没有出现在 WebChromeClient 类的 API 文档中。 此解决方法仅在 SDK 2.3.7 r1 之前有效。对于较新的 SDK,您不能使用 WebChromeClient 或不要在 2.3.x 手机上使用复制/粘贴。见grepcode.com/file/repository.grepcode.com/java/ext/… 和grepcode.com/file/repository.grepcode.com/java/ext/…【参考方案5】:

似乎唯一的选择是设置onTouchListener并编写自己的代码来检测长按。如果是长按则返回true,否则返回false

【讨论】:

但我也想在 javascript 中实现一个 longclick 监听器。通过覆盖 onTouchListener 我将关闭视图上的所有长时间点击。怎么会,不能关闭文本选择?我认为这是一件非常基本的事情。 知道了。试试这个:***.com/questions/923782/… 在android中似乎没有任何作用。 但安卓 4.4 默认选择也即将推出【参考方案6】:

另一种解决方案是将 WebView 子类化并覆盖 performLongClick,如下所示:

public class AdvanceWebView extends WebView 
   //Add constructors...
   @Override
   public boolean performLongClick() 
   return true;
   

【讨论】:

【参考方案7】:

对于 kotlin,我发现以下工作:

webView.isLongClickable = false

【讨论】:

如何在android中覆盖网页视图文本选择菜单

】如何在android中覆盖网页视图文本选择菜单【英文标题】:Howtooverridewebviewtextselectionmenuinandroid【发布时间】:2018-02-2022:00:22【问题描述】:基本的android网络文本选择菜单如下图所示。它具有复制、共享、全选、网络搜索等选项... 查看详情

禁用 TextBox 样式中的文本选择

】禁用TextBox样式中的文本选择【英文标题】:DisableTextSelectioninTextBoxStyle【发布时间】:2012-04-2905:17:46【问题描述】:我想最好使用样式禁用文本框中的文本选择。原因是我有一种风格,它使文本框看起来像一个文本块,直到满... 查看详情

如何在android中的活动开始时禁用按钮的单击事件检查

】如何在android中的活动开始时禁用按钮的单击事件检查【英文标题】:Howtodisableclickeventscheckingofbuttonatthestartingofactivityinandroid【发布时间】:2016-04-2816:11:32【问题描述】:我正在创建一个带有文本和按钮的列表视图,该列表视图... 查看详情

java示例代码_从android中的自定义列表视图中选择具有id的文本视图

java示例代码_从android中的自定义列表视图中选择具有id的文本视图 查看详情

在 chrome/firefox 阅读视图上禁用文本选择

】在chrome/firefox阅读视图上禁用文本选择【英文标题】:Disabletextselectiononchrome/firefoxreadingview【发布时间】:2018-05-1200:44:25【问题描述】:我最近打开了一个博客,但我的文章遇到了一些问题:我正试图“不可能”将它们复制到... 查看详情

禁用列表视图中的元素选择?

】禁用列表视图中的元素选择?【英文标题】:DisableselectionofanelementinListview?【发布时间】:2012-04-0320:12:57【问题描述】:如何禁用列表视图中元素的选择?我不想在单击ListView中的元素时更改背景。你能帮帮我吗?<ListViewName=... 查看详情

如何在android中的timepicker上禁用过去的时间

】如何在android中的timepicker上禁用过去的时间【英文标题】:howtodisablepasttimeontimepickerinandroid【发布时间】:2018-08-1722:30:05【问题描述】:这是我的代码时间视图和日期视图。如何我将成为选择日期,然后设置当前时间并禁用过... 查看详情

css禁用网页中的选择(代码片段)

查看详情

选择自定义选择器视图中的第一行时如何禁用按钮?

】选择自定义选择器视图中的第一行时如何禁用按钮?【英文标题】:Howtodisableabuttonwhenthe1strowinacustompickerviewisselected?【发布时间】:2017-03-1400:30:50【问题描述】:我有一个用于2个视图控制器的自定义UIPickerView类(也符合UIPickerV... 查看详情

禁用文本框丢失视图状态

】禁用文本框丢失视图状态【英文标题】:Disabledtextboxlossesviewstate【发布时间】:2011-09-1301:40:43【问题描述】:我正在根据选择的下拉菜单动态生成表单。该表单由字段(十进制值的数据输入+几个文本字段)组成。必须在末尾... 查看详情

文本视图中的文本和图像组合(Android App)

】文本视图中的文本和图像组合(AndroidApp)【英文标题】:CombinationOfTextandImageinTextView(AndroidApp)【发布时间】:2021-10-1907:20:17【问题描述】:我想在他们的文本视图中分别将Facebook徽标和Google徽标添加到他们的文本Facebook和Google... 查看详情

禁用网页的 Internet Explorer 11 阅读视图

】禁用网页的InternetExplorer11阅读视图【英文标题】:DisableInternetExplorer11ReadingViewforawebpage【发布时间】:2014-02-1202:18:30【问题描述】:有没有办法可以禁用InternetExplorer11的网页阅读视图模式?即是否可以包含任何元标记或类似内... 查看详情

如何禁用 TextArea (JavaFX) 中的文本选择?

】如何禁用TextArea(JavaFX)中的文本选择?【英文标题】:HowtodisabletextselectioninTextArea(JavaFX)?【发布时间】:2020-08-2304:36:57【问题描述】:我想禁用用户在JavaFX的textArea中选择文本的功能。如何做到这一点?【问题讨论】:【参考方... 查看详情

在 Android 中禁用导航抽屉中的项目

】在Android中禁用导航抽屉中的项目【英文标题】:DisablingitemsinaNavigationDrawerinAndroid【发布时间】:2013-07-0601:44:23【问题描述】:我正在使用导航抽屉示例downloadablehere。我想扩展此示例以禁用选择行星之一。为简单起见,假设我... 查看详情

在 phonegap 网络应用程序(android)中禁用部分文本选择

】在phonegap网络应用程序(android)中禁用部分文本选择【英文标题】:Disablepartialtextselectioninphonegapwebapp(android)【发布时间】:2013-09-1823:18:25【问题描述】:我想在phonegapWeb应用程序的某些DOM元素上禁用文本选择效果(Andorid上用... 查看详情

禁用 Chrome for Android 文本选择弹出窗口

】禁用ChromeforAndroid文本选择弹出窗口【英文标题】:DisableChromeforAndroidtextselectionpopup【发布时间】:2017-07-0906:44:14【问题描述】:我想隐藏在用户选择任何文本时显示的ChromeforAndroid文本选择弹出窗口,这样默认文本选项弹出窗... 查看详情

csscss:禁用svg元素中的文本选择(代码片段)

查看详情

禁用 Android 滚动视图,但仍允许点击滚动视图中的按钮

】禁用Android滚动视图,但仍允许点击滚动视图中的按钮【英文标题】:DisableAndroidscrollview,butstillallowtapsonbuttonsinthescrollview【发布时间】:2013-11-1101:57:15【问题描述】:我希望能够阻止用户在我的AndroidScrollView中滚动,但仍能检测... 查看详情