【问题标题】:How to disable the double click that selects a word in EditText?如何禁用在 EditText 中选择单词的双击?
【发布时间】:2019-08-05 20:32:09
【问题描述】:

this 答案中,我发布了我的解决方案,用于禁用EditText 的默认copy, paste, select all and clipboard 行为,包括禁用句柄选择光标:

三个步骤包括 a) 一个简短的 sn-p 代码(多次发布在 Stackoverflow 中); b) 空图像和 c) 自定义和全局 EditText 样式

如果一个人只是踏出a,它会继续显示handle select。如果单击手柄选择,则会出现带有Clipboard + Select All 的弹出窗口,因此应该选择与手柄选择相关联的空图像。

但是,有一个功能我根本无法处理:

double clickAndroid 默认行为会在几分之一秒内选择带有粉红色背景的点击单词,如下所示:

我尝试了 StackOverflow 中提出的许多解决方案,包括更改 onClick(由 setOnClickListener 插入)事件以在不到 1 秒的时间内禁用 TextEdit 控件,使用计时器或帖子事件。

我也尝试在onTouch 事件中处理光标。

我什至尝试在GestureDetector.SimpleOnGestureListener() 中编写一个空的double click 处理

没有成功。没有线索。

更新

为了帮助澄清,我的问题要求的特征:

1) 无法显示任何额外的键来开始输入

2) 如果适用,我需要让用户触摸文本的任何点,指示他们的“插入”位置。通常他在文本的末尾键入并且没有光标。在这种情况下,我禁用它。

3) 我需要让用户按顺序触摸文本的 2 个点,以进行选择,并带有标记的背景。这不完全是double click,它是两个舒适的单独点击。我不喜欢移动设备上的 double click

-/-

简而言之,我需要使用光标,但不是以 Android 提供的标准方式。因此,我需要禁用默认的 Android 行为,但不会丢失光标和选择一段文本的能力。

-/-

有一个选项可以制作一个闪烁的人造光标,但我想这很费力,因为光标不会完全占据字符位置。

更新 2

当我在EditText 全局样式中使用时

<item name="android:focusableInTouchMode">false</item>

双击变为非活动状态,但我无法再显示光标,也无法通过软件进行选择。

【问题讨论】:

    标签: java android kotlin


    【解决方案1】:

    你试过了吗:

    1) 有一个 TextView 显示在屏幕上(不可编辑,没有您正在解释的问题)。

    2) 在屏幕上有一个按钮,上面写着“开始输入”或任何您想要作为 UX 的按钮来开始交互。您甚至可以将点击监听器直接放在 TextView 上。

    3) 在另一个视图 EditText 下有一个屏幕外/隐藏,当 #2 中的 OnClick 被触发时,它将聚焦在这个视图上 - 从而弹出键盘并开始输入。

    4) 在 edittext 上有一个文本更改侦听器,每当他们在 edittext 中键入时,它都会使用此文本从 #1 更新 TextView。

    从而使整个事情没有光标。

    【讨论】:

    • 这个选项很有趣,但不幸的是不适合我的具体情况。我的问题有点冗长,我将在问题中发布更新以帮助澄清。
    【解决方案2】:

    我找到了解决此问题的方法。这不是可能存在的最优雅的解决方案,但它可以接受。

    但是,我不去考虑一个正确的解决方案,这只是一个技巧。令人惊讶的是,显然没有通过双击关闭单词选择的通用解决方案。

    当我动态创建EditText 时,我设置了

    tEdit.setHighlightColor(Color.TRANSPARENT)  // tEdit is my TextEdit view
    

    当我在我的程序中选择一个区域时,我将使用 underline 来分隔我选择的区域,因此我保持高亮颜色始终透明。

    【讨论】:

    • 您的案例听起来很定制,您最好制作EditText 的源副本并将其完全更改为您想要的:-) android.googlesource.com/platform/frameworks/base/+/master/core/…
    • Blundell,我承认我没有耐心离开去定制EditText。该解决方案已经让我满意,我承认我现在不愿意自定义EditText。我找到的解决方案已经让我 100% 满意,而且它正在工作。我只是对Google 团队不让自定义复制粘贴接口感到惊讶。
    • 我完全明白 :-) 享受!
    猜你喜欢
    • 1970-01-01
    • 2012-03-18
    • 2012-04-05
    • 1970-01-01
    • 2015-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-26
    相关资源
    最近更新 更多