【问题标题】:Android:how to get any KeyPress event with example?Android:如何通过示例获取任何 KeyPress 事件?
【发布时间】:2010-11-13 06:06:54
【问题描述】:

我想在用户按下任意键时获取键值,并根据在 android 中按下的键执行操作。

例如如果用户按下“A”键,那么我想得到那个值,比较,做点什么。

【问题讨论】:

    标签: android event-handling


    【解决方案1】:

    这个问题的答案应该是双重的。它由生成密钥的方式决定。如果按下硬件键,那么下面描述的两种方法都是有效的。如果是按软键,则视实际情况而定。

    1.) 如果按键是通过长按菜单键获得的软键盘上按下的结果:

    您需要小心地重写以下函数:

    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) {
    
        switch (keyCode) {
            case KeyEvent.KEYCODE_A:
            {
                //your Action code
                return true;
            }
        }
        return super.onKeyDown(keyCode, event);
    }
    

    2.) 如果您的活动包含 EditText,并且从中获得了软键盘,那么第一种方法不起作用,因为 EditText 已经使用了键事件。您需要使用文本更改的侦听器:

    mMyEditText.addTextChangedListener(new TextWatcher()
    {
        public void afterTextChanged(Editable s) 
        {
        }
        public void beforeTextChanged(CharSequence s, int start, int count, int after) 
        {
            /*This method is called to notify you that, within s, the count characters beginning at start are about to be replaced by new text with length after. It is an error to attempt to make changes to s from this callback.*/ 
        }
        public void onTextChanged(CharSequence s, int start, int before, int count) 
        {
        }
    );
    

    【讨论】:

    • 这仅捕获硬键事件,如返回和菜单,但不捕获软输入键事件。
    • 你确定吗?也适用于我的信件。您在哪部手机上测试过?
    • @Zelimir 请这是我的问题,如果你能回答的话,谢谢你。stackoverflow.com/questions/21746279/…
    • @Farhan Shah - 您能否更详细地解释一下您在做什么,以及您观察到的问题是什么。
    • @Zelimir 我的问题是如果没有人触摸键盘或鼠标 3 分钟然后它开始消息(此时我被卡住了),我该如何实现这一点?
    【解决方案2】:

    如果您的 ssoo 版本最高为 2.3,Zelimir 代码可以工作 如果您在 2.3 中运行此代码,它将根本不起作用,在所有 ssoo 版本中控制事件键的方法是使用 dispatchKeyEvent()

    @Override
        public boolean dispatchKeyEvent(KeyEvent event) {
            Log.d("hello", String.valueOf(event.getKeyCode()));
            return super.dispatchKeyEvent(event);
        }
    

    有了这个,你可以控制在 web 视图中或任何你在的地方按下的键。唯一的错误是你无法控制“动作按钮”……不知道为什么。

    【讨论】:

    • 如果输入语言不是英语,则不起作用。 dispatchKeyEvent 根本没有被调用。
    【解决方案3】:

    试试这个,效果很好。

    @Override
    public boolean onKeyUp (int keyCode, KeyEvent event){
    char c = (char) event.getUnicodeChar();
    //Do something....
    return super.onKeyUp(keyCode, event);
    }
    

    【讨论】:

    • 不起作用。如果键盘语言不是英语,则根本不会调用 onKeyUp。例如,如果它是希腊语。
    猜你喜欢
    • 1970-01-01
    • 2010-11-27
    • 1970-01-01
    • 2011-03-27
    • 2016-09-21
    • 2015-06-17
    • 2018-07-25
    • 2011-01-09
    • 1970-01-01
    相关资源
    最近更新 更多