エクササイズアプリのビューの1つで、プログラムでテキスト選択を実行しようとしています。
ビューの左上隅にあるCursorControllers(別名ハンドル)によって視覚的に示される「テキスト選択モード」に(プログラムで)入ることができます。
右の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はMotionEventオブジェクトを消費する別のUIオブジェクトを探し続け、最終的に私のビューに到達します。
なぜこれが起こらないのですか?
私は非常に基本的な何かを見逃しているに違いありません...