对于 EditText 长按,我想要一个自定义操作栏。除了不是出现在屏幕顶部的操作栏,我需要控制它的位置。我还想添加一些自定义按钮(但这可能是最简单的部分)。
是的,我意识到我违反了 Android 准则。
创建弹出窗口并定位它很容易。困难的部分是保留 EditText 的文本选择行为,以便在长按时根据标准行为选择文本。
我尝试了许多实验,但由于某种原因,所有这些实验都失败了:
使用 setCustomSelectionActionModeCallback 并在其 onCreateActionMode() 中返回“false”。这可以防止出现操作栏,但也可以防止长按进行文本选择。
继续#1,我尝试继承 EditText 并包含我自己的 onTouch 方法。在 onTouch 中,我认为向 ACTION_UP 添加一些逻辑可能会起作用。两种变体:
总是从 ACTION_UP 返回 false。然后 EditText 永远不会看到 ACTION_UP 并将每次触摸都视为长触摸。因此,没有光标定位。
允许EditText接收ACTION_UP,但在长按的情况下,发布一个函数来设置选择。这在某些情况下有效,但在其他情况下,它只是将光标设置到单个位置并且不会突出显示选择。换句话说, setSelection() 中断。
我已经尝试了上述的细微变化。到目前为止没有任何效果。即使某些东西确实有效,它也可能是一个非常脆弱的解决方案,可能会在下一个 Android 修订版 EditText 时中断。
欢迎任何想法!