代码改变世界

Android 模拟MotionEvent事件 触发输入法

Android 模拟MotionEvent事件 触发输入法

 

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

欢迎转载并说明转自:http://blog.csdn.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.               
  7.     <Button android:id="@+id/ButtonIME"  
  8.         android:layout_width="wrap_content"  
  9.         android:layout_height="wrap_content"  
  10.         android:padding="5px"  
  11.         android:text="弹出软键盘输入法" />  
  12.       
  13.           
  14.     <EditText android:id="@+id/EditTextIME"  
  15.         android:layout_width="wrap_content"  
  16.         android:layout_height="wrap_content"  
  17.         android:padding="5px"  
  18.         android:text="显示输入法键盘"/>  
  19.   
  20. </LinearLayout>  


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

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

posted on 2014-03-12 20:32  Captain林  阅读(1111)  评论(0编辑  收藏  举报

导航