zoukankan      html  css  js  c++  java
  • 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.     } 
    life is a jounery,yes
  • 相关阅读:
    JavaScript事件的几个细节
    CSS选择器从右向左的匹配规则
    JavaScript原型与继承
    CSS3制作ajax loader icon
    jQuery之.on()方法
    Special Resource Operator (SRO)
    openness configure dns server
    add dns items for coredns
    深入理解linux nat
    tcpdump for container
  • 原文地址:https://www.cnblogs.com/CaptainLin/p/3597241.html
Copyright © 2011-2022 走看看