在練習應用程序中的一個視圖中,我嘗試以編程方式執行文本選擇。爲什麼MotionEvent仿真不能工作?
我能夠(以編程方式)輸入「文本選擇模式」,它由視圖左上角的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,的Android不斷尋找另UI對象消耗MotionEvent對象,最終到達我的視圖。
爲什麼不會發生這種情況?
我必須失去了一些非常基本的...
成爲第一個嘗試回答這個難題的人的榮譽。然而,不幸的是,dispatchTouchEvent()並不會對事件產生多大的期望。也許@DJC在他對以下問題的回答中是正確的:http://stackoverflow.com/questions/5240287/how-to-send-synthesized-motionevent-through-the-system – 2011-03-13 16:21:40