Android KeyEvent 不注册

发布时间: 2017/3/17 23:56:22
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我试图侦听中的某些关键事件 android ,我附加到该事件listener编辑文本.我正在为空间杆压力机,英镑和 @ key.for 由于某种原因此事件只解雇的 space 条和数字键。该函数不甚至获取要执行任何其他键......,我想知道为什么吗?是他们的东西,我做错了吗?

package com.stv.mynotes;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

import java.util.StringTokenizer;

public class TestActivity extends AppCompatActivity implements View.OnKeyListener
{

    EditText edit_txt;

    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
        edit_txt = (EditText) (findViewById(R.id.test_txt));
        edit_txt.setOnKeyListener(this);
    }
    public boolean onKey(View v,int keyCode,KeyEvent event)
    {
        int tmpCode = event.getKeyCode();
        if (event.getAction() == KeyEvent.ACTION_DOWN)
        {
            if (tmpCode == KeyEvent.KEYCODE_SPACE)
            {
                Log.i("Test", "Space pressed:"+tmpCode);
                return true;
            }
            if (tmpCode == KeyEvent.KEYCODE_9)
            {
                Log.i("Test", "9 pressed:"+tmpCode);
                return true;
            }
            else
            {
                Log.i("Test","Unknown Down:"+tmpCode);
                return false;
            }
        }
        if(event.getAction()==KeyEvent.ACTION_UP)
        {
            if (tmpCode == KeyEvent.KEYCODE_POUND)
            {
                Log.i("Test", "Pound pressed:"+tmpCode);
                return true;
            }
            if (tmpCode == KeyEvent.KEYCODE_AT)
            {
                Log.i("Test", "@ pressed:"+tmpCode);
                return true;
            }
            else
            {
                Log.i("Test","Unknown UP:"+tmpCode);
                return false;
            }
        }
        else
            return false;
    }
}

解决方法 1:

我发现这里http://developer.android.com/reference/android/text/method/KeyListener.html关于 onClickListener:

按软键输入的方法触发此listener的方法不需和事实上不鼓励这样做。默认 android keyboard 不会触发任何键到任何这些 application 针对果冻豆或更高版本,并将只提供它为一些按键到应用程序针对冰淇淋三明治或更早。

此外︰

注意,大多数情况下此接口定义的已被一般的软输入方法取代 InputMethod ; 案件应该只用于在哪里 application 有它自己的屏幕键盘,也想 processkeyboard 要与之相匹配的事件。

所以,如果你在上面所述的情况,尝试重新考虑你的代码,根据文件的建议。
作为替代方法,您可以尝试使用这︰

 edit_txt.addTextChangedListener(new TextWatcher() {
        int initialLength = 0;
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            initialLength = edit_txt.getText().length();
        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            int newLength = edit_txt.getText().length();
            if(newLength<initialLength) return;
            if(edit_txt.getText().charAt(newLength-1)=='@'){
                Log.i("test", "@");
            }
        }

        @Override
        public void afterTextChanged(Editable s) {}
    });
官方微信
官方QQ群
31647020