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);
    }
}
复制代码

 

posted on   luzhouxiaoshuai  阅读(1868)  评论(0编辑  收藏  举报

编辑推荐:
· 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代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示