Android 模拟MotionEvent事件 触发输入法

时间:2023-03-09 18:16:31
Android 模拟MotionEvent事件 触发输入法

Android 模拟MotionEvent事件 触发输入法

关键词:MotionEvent,模拟按键,模拟点击事件,主动弹出输入法,弹出软键盘。

欢迎转载并说明转自:http://blog.****.net/aminfo/article/details/7887964

一、布局文件showime.xml:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. android:orientation="vertical">
  6. <Button android:id="@+id/ButtonIME"
  7. android:layout_width="wrap_content"
  8. android:layout_height="wrap_content"
  9. android:padding="5px"
  10. android:text="弹出软键盘输入法" />
  11. <EditText android:id="@+id/EditTextIME"
  12. android:layout_width="wrap_content"
  13. android:layout_height="wrap_content"
  14. android:padding="5px"
  15. android:text="显示输入法键盘"/>
  16. </LinearLayout>

二、Activity,ShowIME.java文件源码:

    1. package org.shuxiang.test;
    2. import android.app.Activity;
    3. import android.os.Bundle;
    4. import android.os.Handler;
    5. import android.os.Looper;
    6. import android.os.Message;
    7. import android.os.SystemClock;
    8. import android.view.MotionEvent;
    9. import android.view.View;
    10. import android.view.Window;
    11. import android.view.View.OnClickListener;
    12. import android.widget.Button;
    13. import android.widget.EditText;
    14. public class ShowIME  extends Activity
    15. {
    16. private EditText et;
    17. private Button bt;
    18. private static Handler messageHandler;
    19. @Override
    20. public void onCreate(Bundle savedInstanceState) {
    21. super.onCreate(savedInstanceState);
    22. requestWindowFeature(Window.FEATURE_NO_TITLE);
    23. setContentView(R.layout.showime);
    24. bt = (Button) findViewById(R.id.ButtonIME);
    25. bt.setOnClickListener(new OnClickListener()
    26. {
    27. @Override
    28. public void onClick(View v) {
    29. // TODO Auto-generated method stub
    30. et.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN, et.getLeft()+5, et.getTop()+5, 0));
    31. et.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_UP, et.getLeft()+5, et.getTop()+5, 0));
    32. }
    33. });
    34. et = (EditText) findViewById(R.id.EditTextIME);
    35. Looper looper = Looper.myLooper();
    36. messageHandler = new MessageHandler(looper);
    37. //此处的作用是延迟1秒,然后激活点击事件
    38. //欢迎转载并说明转自:http://blog.****.net/aminfo/article/details/7887964
    39. new Thread()
    40. {
    41. @Override
    42. public void run()
    43. {
    44. synchronized(this)
    45. {
    46. try
    47. {
    48. wait(1000); //1秒
    49. }
    50. catch (InterruptedException e)
    51. {
    52. // TODO Auto-generated catch block
    53. e.printStackTrace();
    54. }
    55. }
    56. Message message = Message.obtain();
    57. message.what = 1;
    58. messageHandler.sendMessage(message);
    59. }
    60. }.start();
    61. }
    62. class MessageHandler extends Handler
    63. {
    64. public MessageHandler(Looper looper)
    65. {
    66. super(looper);
    67. }
    68. @Override
    69. public void handleMessage(Message msg)
    70. {
    71. Bundle bundle = msg.getData();
    72. switch (msg.what)
    73. {
    74. case 1:
    75. //模拟点击按钮
    76. bt.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN, et.getLeft()+5, et.getTop()+5, 0));
    77. bt.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_UP, et.getLeft()+5, et.getTop()+5, 0));
    78. //以下代码模拟点击文本编辑框
    79. //et.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN, et.getLeft()+5, et.getTop()+5, 0));
    80. //et.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_UP, et.getLeft()+5, et.getTop()+5, 0));
    81. break;
    82. default:
    83. break;
    84. }
    85. }
    86. }