在练习应用程序的一个视图中,我尝试以编程方式执行文本选择。
我能够(以编程方式)输入“文本选择模式”,该模式由视图左上角的 CursorControllers(AKA 句柄)直观地指示。
如果我手动拖动正确的 CursorController,然后再次单击它(在模拟器中),它会按预期工作(完美),显示一条简短消息:“文本已复制到剪贴板”。
但是当我尝试以编程方式拖动正确的 CursorController 时,什么也没有发生。
我尝试这样做的方法是模拟 MotionEvent。在视图中,我调用:
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 对象,最终到达我的视图。
为什么这不会发生?
我一定错过了一些非常基本的东西......