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. <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.csdn.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. }

Android 模拟MotionEvent事件 触发输入法的更多相关文章

  1. android 模拟按键事件

    模拟按键事件可以提高代码的复用性,比如在一个edittext的回车事件里做的一些处理 在该edittext的另一个输入要做相同的处理时,模拟按键事件就非常方便了. 代码很简单,直接上代码: new T ...

  2. Android模拟、实现、触发系统按键事件的方法

     Android模拟.实现.触发系统按键事件的方法 /** * 模拟系统按键. * * @param keyCode */ public static void onKeyEvent(final ...

  3. Android中Touch事件分析--解决HorizontalScrollView滑动和按钮事件触发问题

    之前写过关于HorizontalScrollView滑动和按钮事件触发问题,但是不能所有的情况,最近几天一直在想这个问题,今天有一个比较好的解决思路,最终应用在项目里面效果也很好,首先说明一下功能: ...

  4. Android MotionEvent事件响应机制

    在android中,事件主要包括点击.长按.拖曳.滑动等操作,这些构成了Android的事件响应,总体来说,所有的事件都由如下三个部分作为基础构成: 按下(action_down),移动(action ...

  5. Android笔记:触摸事件的分析与总结----TouchEvent处理机制

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://glblong.blog.51cto.com/3058613/1559320   ...

  6. 如何模拟click事件,打开一个a标签链接?

    在项目开发过程中,我们经常会碰到通过接口返回一个地址,同时在新的tab页面打开一个网址的情况,最直观的想法就是通过window.open(url)的方式,打开一个新的页面,但是大部分浏览器会遭遇拦截. ...

  7. Android:触屏事件

    Android触屏事件包含两种: 1)屏幕触屏事件:重写onTouchEvent(MotionEvent event): 2)控件触屏事件:给控件注册触屏事件,setOnTouchEventListe ...

  8. Android 手势&触摸事件

    在刚开始学Android的时候,就觉得Google的文档不咋样,在研究手势时,更加的感觉Google的文档写得实在是太差了.很多常量,属性和方法,居然连个描述都没有. 没有描述也就罢了,但是OnGes ...

  9. Android模拟屏幕点击input tap替代解决方案

    动机解释 本来直接使用 adb shell -> input 即可模拟 键盘事件,触屏事件keyevent ,text,tap 但是手上的这台目标Android机4.0.3系统的input只支持 ...

随机推荐

  1. R语言:数据的分割-计算-整合(split-apply-aggregate)

    当获取到原始数据时,我们通常的做法是对该数据进行分割成小片段,然后对各小片段进行计算统计,最后整合成最终的数据.这是统计学里数据处理的一般规律. R语言为我们提供了相应的函数来分别处理这三个阶段任务. ...

  2. 边缘检测︱基于 HED网络TensorFlow 和 OpenCV 实现图片边缘检测

    本文摘录自<手机端运行卷积神经网络的一次实践 – 基于 TensorFlow 和 OpenCV 实现文档检测功能> 只截取感兴趣 的片段. . 一.边缘检测 1.传统边缘检测 Google ...

  3. wordpress 使用固定链接

    官方文档 无插件移除url中category 目录前缀 设置 >> 固定链接,设置固定链接为自定义为: /%category%/%postname%/或者/%category%/%post ...

  4. I.MX6 View长宽大于屏的分辨率

    /******************************************************************************** * I.MX6 View长宽大于屏的 ...

  5. cowboy实现websocket

    使用cowboy实现websocket主要实现以下回调函数 下面的函数返回值要具体弄清楚原因参考 websocket具体协议  主要就是两个部分 握手和数据传输 -export([init/3]).  ...

  6. fedora 安装新字体 courier new xxx

    fedora安装新字体 1.将windows字体拷贝到/usr/share/fonts/truetype下面,文件夹名字可以随便起 cp /media/c/WINDOWS/Fonts/* /usr/s ...

  7. BZOJ - 2141 排队 (动态逆序对,区间线段树套权值线段树)

    题目链接 交换两个数的位置,只有位于两个数之间的部分会受到影响,因此只需要考虑两个数之间有多少数对a[l]和a[r]产生的贡献发生了变化即可. 感觉像是个带修改的二维偏序问题.(修改点$(x,y)$的 ...

  8. matlab 与 modelsim 联调 cic抽取滤波器

    注:本设计的参数为:D=2,R=5,N=3:时钟频率为50mhz,输入信号为有符号8位,根据公式bmax=bin+N*log(2,R*D):可以得到bmax=18: 1,cic抽取滤波器原理 网上资料 ...

  9. LA3263 That Nice Euler Circuits

    题意 PDF 分析 欧拉定理:设平面内顶点数.边数.面数分别为\(V,E,F\),则\(V+F-E=2\). 枚举每对线段求交点,注意去重. 另外注意第n个端点和第一个端点重合. 时间复杂度\(o(T ...

  10. Vue.js devtool插件下载安装及后续问题解决

    在中国,你是无法使用谷歌应用商店,所以你下载插件,要使用一些别的手段,一种是下载源码编译,另一种是通过第三方网站.第一种不适合小白,所以现在介绍第二组. 下载插件网站 国外网站:https://www ...