android - 为什么这个 MotionEvent 模拟不起作用?

标签 android events touch textselection

在练习应用程序的一个 View 中,我正在尝试以编程方式执行文本选择。

我能够(以编程方式)进入“文本选择模式”,该模式由 View 左上角的 CursorControllers(也称为句柄)直观地指示。

如果我手动拖动右侧的 CursorController,然后再次单击它(在模拟器中),它会按预期(完美)工作,并显示一条简短消息:“文本已复制到剪贴板”。

但是当我尝试以编程方式拖动正确的 CursorController 时,没有任何反应。

我尝试这样做的方法是模拟一个 MotionEvent。在 View 中,我调用:

  event = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_DOWN, x, y, 0);
  MainActivity.onTouch(this, event);

在 MainActivity 中,我当然会实现 OnTouchListener:

@Override
public boolean onTouch(View v, MotionEvent event) { // called BEFORE button's onTouchEvent()
    Log.v("MainActivity::onTouch()", describeEvent(v, event));
    switch (event.getAction()) { 
        case MotionEvent.ACTION_DOWN: 
        case MotionEvent.ACTION_UP: 
            if (!v.hasFocus()) { 
                v.requestFocus(); 
             } 
             break; 
    } 
    return false; 
}

如果我理解正确,仅通过从 onTouch 返回“false”,Android 会一直寻找另一个 UI 对象来使用 MotionEvent 对象,最终到达我的 View

为什么这没有发生?

我一定遗漏了一些非常基本的东西......

最佳答案

由于缺乏有效的解决方案,出于安全原因,我只能得出结论,我一直试图完成的事情在 Android 上是不可能的。可以在以下链接中找到解释:How to send synthesized MotionEvent through the system?

关于android - 为什么这个 MotionEvent 模拟不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5250290/

相关文章:

android - 如何知道Android手机中的位置区号和Cell ID

ios - SDL 2.0 iOS - 未收到触摸事件

svg - Asus Slate 平板电脑上的 RaphaelJS Touch 支持

android - Android 12 上的 AppLinks - 仅打开浏览器

android - 在 ViewPager 中按需加载内容

JavaScript 滚动事件不会在装有 iOS7 的 iPhone 上触发

javascript - 循环节点列表中的所有元素时变量错误

javascript - 获取Ipad touchstart坐标

javascript - 我们可以使用 jquery 调用智能手机的 native 共享功能吗?

wpf - 如何在 IronRuby 中实现包含 CLR 事件的接口(interface)