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 KeyEvent事件机制的更多相关文章
- Android View事件机制一些事
本文主要讲述: 自己对View事件机制的一些理解 在项目中遇到的一些坑,解决方案 收集了一些View的事件机制问题 事件的分发原理图 对于一个root viewgroup来说,如果接受了一个点击事件, ...
- Android View事件机制 21问21答
原文: http://www.cnblogs.com/punkisnotdead/p/5179115.html#3358859 1.View的坐标参数 主要有哪些?分别有什么注意的要点? 答:Left ...
- 【知识梳理1】Android触摸事件机制
前言 随着科学技术的发展,智能手机早已成为我们当代人身边不可缺少的"伙伴"之中的一个,堪比对象女友.每天我们对着手机反复的做着点击.滑动操作,而手机则随着我们的操作给我们展示她的精 ...
- 初识Android触摸事件传递机制
前言 今天总结的一个知识点是Andorid中View事件传递机制,也是核心知识点,相信很多开发者在面对这个问题时候会觉得困惑,另外,View的另外一个难题滑动冲突,比如在ScrollView中嵌套Li ...
- Android触摸事件的应用
前言 上一篇讲了Android触摸事件的传递机制,具体可以看这里 初识Android触摸事件传递机制.既然知道Android中触摸事件的传递分发,那么它能解决什么样的问题,在我们实际开发中如何应用,这 ...
- React-Native系列Android——Touch事件原理及状态效果
Native原生相比于Hybrid或H5最大长处是具有流畅和复杂的交互效果,触摸事件便是当中重要一项,包括点击(Click).长按(LongClick).手势(gesture)等. 以最简单常见的点击 ...
- Android Touch事件传递机制 二:单纯的(伪生命周期)
转载于:http://blog.csdn.net/yuanzeyao/article/details/38025165 在前一篇文章中,我主要讲解了Android源码中的Touch事件的传递过程,现在 ...
- Android Touch事件传递机制 一: OnTouch,OnItemClick(监听器),dispatchTouchEvent(伪生命周期)
ViewGroup View Activity dispatchTouchEvent 有 有 有 onInterceptTouchEvent 有 无 无 onTouchEvent 有 有 有 例 ...
- Android View 事件分发机制 源码解析 (上)
一直想写事件分发机制的文章,不管咋样,也得自己研究下事件分发的源码,写出心得~ 首先我们先写个简单的例子来测试View的事件转发的流程~ 1.案例 为了更好的研究View的事件转发,我们自定以一个My ...
随机推荐
- 00016-layui 动态加载菜单 laytpl
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ i ...
- PMP | 备考笔记
(持续更新......) 五大过程组和十大知识领域是PMP的重要组成部分,也是这门课的重点线索,本文会逐步迭代.渐进明细的来补充完善这个体系. (先放个图吧) 以下每个模块记录自己有点模糊的地方 项目 ...
- 50个SQL语句(MySQL版) 问题六
--------------------------表结构-------------------------- student(StuId,StuName,StuAge,StuSex) 学生表 tea ...
- Linux题目
1.删除某目录下所有文件,只保留指定文件. 例:假设/abc文件夹下有a1.a2....a10文件,保留a5和a6文件,其他全部删除 [root@localhost abc]# touch a{1.. ...
- win10和centos7双系统双磁盘引导的实现
win10和centos7双系统双磁盘引导的实现1.背景:dell5460笔记本电脑M2-120G固态盘无法在bios中引导,新装了M360G固态盘后,考虑把120G固态盘安装centos7.5系统做 ...
- Rocket - tilelink - first
https://mp.weixin.qq.com/s/0nzkV4K1osNEQzrtITYxmw 介绍Edges中first/last/done的实现. 1. firstlastH ...
- Multiple annotations found at this line: - Undefined attribute name (charset).
把 meta charset="UTF-8" 改为 meta http-equiv="Content-Type" content="text/html ...
- Java实现 蓝桥杯 算法提高 抽卡游戏
试题 算法提高 抽卡游戏 某个抽卡游戏卡池抽出限定卡的概率为p,该游戏有一个"井"的机制,抽满k次卡后直接送这张限定卡.试求获得这张限定卡需要的期望抽卡次数.输入为一行,用空格隔开 ...
- Java实现 蓝桥杯VIP 算法提高 3000米排名预测
算法提高 3000米排名预测 时间限制:1.0s 内存限制:256.0MB 问题描述 3000米长跑时,围观党们兴高采烈地预测着最后的排名.因为他们来自不同的班,对所有运动员不一定都了解,于是他们分别 ...
- java实现三进制转十进制
** 三进制转十进制** 不同进制的数值间的转换是软件开发中很可能 会遇到的常规问题.下面的代码演示了如何把键盘输入的3 进制数字转换为十进制.试完善之. BufferedReader br = ne ...