一手遮天 Android - 输入: 按键事件

项目地址 https://github.com/webabcd/AndroidDemo
作者 webabcd

一手遮天 Android - 输入: 按键事件

示例如下:

/input/KeyDemo1.java

/**
 * 本例用于演示如何监听按键事件
 */

package com.webabcd.androiddemo.input;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.KeyEvent;
import android.widget.TextView;

import com.webabcd.androiddemo.R;

import java.util.Locale;

public class KeyDemo1 extends AppCompatActivity {

    private TextView mTextView1;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_input_keydemo1);

        mTextView1 = findViewById(R.id.textView1);

        // 注:
        // 弹出 AlertDialog 后则当前 Activity 就监听不到按键事件了,因为 Activity 失去焦点了
        // 此时,可以通过 AlertDialog 的 setOnKeyListener() 来监听按键事件,示例代码如下
        /*
        alertDialog.setOnKeyListener(new DialogInterface.OnKeyListener() {
            @Override
            public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
                if (keyCode == KeyEvent.KEYCODE_BACK) {
                    // 不再需要其他人来处理此按键了
                    return true;
                }
                return false;
            }
        });
        */
    }

    // 按键按下的事件
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        // keyCode - 按键的键值(比如 KeyEvent.KEYCODE_A, KeyEvent.KEYCODE_1, KeyEvent.KEYCODE_BACK, KeyEvent.KEYCODE_MENU, KeyEvent.KEYCODE_VOLUME_DOWN, KeyEvent.KEYCODE_VOLUME_UP 等等)
        // event.getRepeatCount() - 按键按下不动时,会重复触发 onKeyDown 事件,这个方法返回的就是这个重复次数
        String msg = String.format(Locale.US, "onKeyDown keyCode:%d, repeatCount:%d", keyCode, event.getRepeatCount());
        mTextView1.setText(msg);

        // 返回 true 的意思就是不再需要其他人来处理此按键了
        // 比如你想按下返回键后不返回,那就在这里判断,如果按了返回键就直接 return true
        // return true;

        return super.onKeyDown(keyCode, event);
    }

    // 按键抬起的事件
    @Override
    public boolean onKeyUp(int keyCode, KeyEvent event) {
        String msg = String.format(Locale.US, "onKeyUp keyCode:%d", keyCode);
        mTextView1.setText(msg);

        return super.onKeyUp(keyCode, event);
    }
}

/layout/activity_input_keydemo1.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

项目地址 https://github.com/webabcd/AndroidDemo
作者 webabcd

posted @ 2021-06-02 09:11  webabcd  阅读(68)  评论(0编辑  收藏  举报