android KeyEvent事件机制
package im.weiyuan.com.viewutils; import android.content.Intent; import android.os.PersistableBundle; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean dispatchKeyEvent(KeyEvent event) { Log.d("123456","activity dispatchKeyEvent is called"+event.getAction()); return super.dispatchKeyEvent(event); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { Log.d("123456","activity onKeyDown is called"+event.getAction()); return super.onKeyDown(keyCode, event); } @Override public boolean onKeyUp(int keyCode, KeyEvent event) { Log.d("123456","activity onKeyUp is called"+event.getAction()); return super.onKeyUp(keyCode, event); } @Override public boolean onKeyLongPress(int keyCode, KeyEvent event) { Log.d("123456","activity onKeyLongPress is called"+event.getAction()); return super.onKeyLongPress(keyCode, event); } }
如果按键盘的返回按键:
日志的打印如下:
07-24 14:20:57.771 26412-26412/im.weiyuan.com.viewutils D/123456: activity dispatchKeyEvent is called0
07-24 14:20:57.772 26412-26412/im.weiyuan.com.viewutils D/123456: activity onKeyDown is called0
07-24 14:20:57.831 26412-26412/im.weiyuan.com.viewutils D/123456: activity dispatchKeyEvent is called1
07-24 14:20:57.831 26412-26412/im.weiyuan.com.viewutils D/123456: activity onKeyUp is called1
实现下面的一个需求:
当点击返回按钮的时候弹出一个对话框提示是否退出应用
package im.weiyuan.com.viewutils; import android.content.DialogInterface; import android.content.Intent; import android.os.PersistableBundle; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean dispatchKeyEvent(KeyEvent event) { Log.d("123456","activity dispatchKeyEvent is called"+event.getAction()); return super.dispatchKeyEvent(event); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { Log.d("123456","activity onKeyDown is called"+event.getAction()); if(event.getAction() == KeyEvent.ACTION_DOWN){ new AlertDialog.Builder(this).setTitle("kldlskakl").setMessage(R.string.app_name) .setPositiveButton("41414", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub //这里定义对话框按钮单击之后要运行的事件 } }).show(); } /** * 这里要将案件的事件消费掉,所以这里函数的返回值是true * */ return true; } @Override public boolean onKeyUp(int keyCode, KeyEvent event) { Log.d("123456","activity onKeyUp is called"+event.getAction()); return super.onKeyUp(keyCode, event); } @Override public boolean onKeyLongPress(int keyCode, KeyEvent event) { Log.d("123456","activity onKeyLongPress is called"+event.getAction()); return super.onKeyLongPress(keyCode, event); } }
分类:
android应用开发
posted on 2017-07-24 14:45 luzhouxiaoshuai 阅读(1868) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!