Android 模拟MotionEvent事件 触发输入法
16lz
2021-01-23
Android 模拟MotionEvent事件 触发输入法
android 输入法 layout button 文本编辑 encoding关键词:MotionEvent,模拟按键,模拟点击事件,主动弹出输入法,弹出软键盘。
欢迎转载并说明转自:http://blog.csdn.net/aminfo/article/details/7887964
一、布局文件showime.xml:
[html] view plain copy- <?xmlversion="1.0"encoding="utf-8"?>
- <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:orientation="vertical">
- <Buttonandroid:id="@+id/ButtonIME"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:padding="5px"
- android:text="弹出软键盘输入法"/>
- <EditTextandroid:id="@+id/EditTextIME"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:padding="5px"
- android:text="显示输入法键盘"/>
- </LinearLayout>
二、Activity,ShowIME.java文件源码:
- packageorg.shuxiang.test;
- importandroid.app.Activity;
- importandroid.os.Bundle;
- importandroid.os.Handler;
- importandroid.os.Looper;
- importandroid.os.Message;
- importandroid.os.SystemClock;
- importandroid.view.MotionEvent;
- importandroid.view.View;
- importandroid.view.Window;
- importandroid.view.View.OnClickListener;
- importandroid.widget.Button;
- importandroid.widget.EditText;
- publicclassShowIMEextendsActivity
- {
- privateEditTextet;
- privateButtonbt;
- privatestaticHandlermessageHandler;
- @Override
- publicvoidonCreate(BundlesavedInstanceState){
- super.onCreate(savedInstanceState);
- requestWindowFeature(Window.FEATURE_NO_TITLE);
- setContentView(R.layout.showime);
- bt=(Button)findViewById(R.id.ButtonIME);
- bt.setOnClickListener(newOnClickListener()
- {
- @Override
- publicvoidonClick(Viewv){
- //TODOAuto-generatedmethodstub
- et.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(),SystemClock.uptimeMillis(),MotionEvent.ACTION_DOWN,et.getLeft()+5,et.getTop()+5,0));
- et.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(),SystemClock.uptimeMillis(),MotionEvent.ACTION_UP,et.getLeft()+5,et.getTop()+5,0));
- }
- });
- et=(EditText)findViewById(R.id.EditTextIME);
- Looperlooper=Looper.myLooper();
- messageHandler=newMessageHandler(looper);
- //此处的作用是延迟1秒,然后激活点击事件
- //欢迎转载并说明转自:http://blog.csdn.net/aminfo/article/details/7887964
- newThread()
- {
- @Override
- publicvoidrun()
- {
- synchronized(this)
- {
- try
- {
- wait(1000);//1秒
- }
- catch(InterruptedExceptione)
- {
- //TODOAuto-generatedcatchblock
- e.printStackTrace();
- }
- }
- Messagemessage=Message.obtain();
- message.what=1;
- messageHandler.sendMessage(message);
- }
- }.start();
- }
- classMessageHandlerextendsHandler
- {
- publicMessageHandler(Looperlooper)
- {
- super(looper);
- }
- @Override
- publicvoidhandleMessage(Messagemsg)
- {
- Bundlebundle=msg.getData();
- switch(msg.what)
- {
- case1:
- //模拟点击按钮
- bt.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(),SystemClock.uptimeMillis(),MotionEvent.ACTION_DOWN,et.getLeft()+5,et.getTop()+5,0));
- bt.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(),SystemClock.uptimeMillis(),MotionEvent.ACTION_UP,et.getLeft()+5,et.getTop()+5,0));
- //以下代码模拟点击文本编辑框
- //et.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(),SystemClock.uptimeMillis(),MotionEvent.ACTION_DOWN,et.getLeft()+5,et.getTop()+5,0));
- //et.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(),SystemClock.uptimeMillis(),MotionEvent.ACTION_UP,et.getLeft()+5,et.getTop()+5,0));
- break;
- default:
- break;
- }
- }
- }
更多相关文章
- android切换输入法工具类
- Android设置Edittext只能输入字母数字弹出英文键盘
- android fragment ontouch 事件
- Android之Input子系统事件分发流程
- Android 在xml布局配置文件中给Button按钮添加事件
- Android事件分发机制详解
- Android Input事件APP端流程分析
- android 禁止横屏时输入法全屏
- android noTouch 事件