您的位置:首页 > 移动开发 > Android开发

Android常用的物理按键及其触发事件

2016-12-10 19:17 597 查看
Activity和View都能接收触摸和按键,如果响应事件只需要在继承类里复写事件函数即可;当一个视图(如一个按钮)被触摸时,该对象上的 onTouchEvent() 方法会被调用。不过,为了侦听这个事件,你必须扩展这个类并重写该方法,当一些物理按钮被按下时会调用onKeyDown()方法;

    常见的按键消息和触摸消息

[java] view
plain copy

package com.example.androideventdemo;  

  

import android.os.Bundle;  

import android.view.KeyEvent;  

import android.view.MotionEvent;  

import android.view.View;  

import android.view.View.OnClickListener;  

import android.widget.Button;  

import android.widget.Toast;  

import android.app.Activity;  

  

/** 

 * Android常用的物理按键及其触发事件  

 * KEYCODE_POWER 电源键  

 * KEYCODE_MENU 菜单键  

 * KEYCODE_BACK 后退键 

 * KEYCODE_HOME Home键  

 * KEYCODE_CAMERA 相机键  

 * KEYCODE_SEARCH 查找键  

 * KEYCODE_VOLUME_UP 音量键+  

 * KEYCODE_VOLUME_DOWN 音量键-  

 * KEYCODE_VOLUME_MUTE 静音  

 * 方向键  

 * KEYCODE_DPAD_CENTER 

 * KEYCODE_DPAD_UP  

 * KEYCODE_DPAD_DOWN  

 * KEYCODE_DPAD_LEFT  

 * KEYCODE_DPAD_RIGHT  

 * 键盘键 

 * 数字0~9 字母A~Z  

 * KEYCODE_0 ~ KEYCODE_9  

 * KEYCODE_A ~ KEYCODE_Z  

 * 提供的回调方法有 

 * onKeyUp()、OnKeyDown()、onKeyLongPress() 

 *  

 * @author Administrator 

 *  

 */  

public class MainActivity extends Activity {  

  

    private Button btnClose = null;  

  

    @Override  

    protected void onCreate(Bundle savedInstanceState) {  

        super.onCreate(savedInstanceState);  

        setContentView(R.layout.main);  

        btnClose = (Button) findViewById(R.id.btnClose);  

        btnClose.setOnClickListener(new closelistener());  

    }  

  

    class closelistener implements OnClickListener {  

  

        @Override  

        public void onClick(View v) {  

            // TODO Auto-generated method stub  

            finish();  

        }  

  

    }  

  

    /** 

     * 重写onKeyDown方法可以拦截系统默认的处理 

     */  

    @Override  

    public boolean onKeyDown(int keyCode, KeyEvent event) {  

        // TODO Auto-generated method stub  

        if (keyCode == KeyEvent.KEYCODE_BACK) {  

            Toast.makeText(this, "后退键", Toast.LENGTH_SHORT).show();  

            return true;  

        } else if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) {  

            Toast.makeText(this, "声音+", Toast.LENGTH_SHORT).show();  

            return false;  

        } else if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {  

            Toast.makeText(this, "声音-", Toast.LENGTH_SHORT).show();  

            return false;  

        } else if (keyCode == KeyEvent.KEYCODE_VOLUME_MUTE) {  

            Toast.makeText(this, "静音", Toast.LENGTH_SHORT).show();  

            return false;  

        } else if (keyCode == KeyEvent.KEYCODE_HOME) {  

            Toast.makeText(this, "Home", Toast.LENGTH_SHORT).show();  

            return true;  

        }  

        return super.onKeyDown(keyCode, event);  

    }  

  

    /** 

     * 重写onTouchEvent方法可以处理Touch事件 

     */  

    @Override  

    public boolean onTouchEvent(MotionEvent event) {  

        // TODO Auto-generated method stub  

        if (event.getAction() == MotionEvent.ACTION_MOVE) {  

            Toast.makeText(this, "ACTION_MOVE", Toast.LENGTH_SHORT).show();  

        } else if (event.getAction() == MotionEvent.ACTION_UP) {  

            Toast.makeText(this, "ACTION_MOVE", Toast.LENGTH_SHORT).show();  

        } else if (event.getAction() == MotionEvent.ACTION_DOWN) {  

            Toast.makeText(this, "ACTION_MOVE", Toast.LENGTH_SHORT).show();  

        }  

        return super.onTouchEvent(event);  

    }  

  

}  

更多的事件可以参考SDK文档的MotionEvent、KeyEvent两个类,在KeyEvent中如果处理了KeyEvent.KEYCODE_BACK事件,那就不会执行默认的操作,比如收到KeyEvent.KEYCODE_BACK事件后默认是退出,如果直接return那就不会处理退出了。

如下图

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: