一些关键音符生成事件和另一个键生成事件在android无法正常工作

时间:2013-03-15 06:34:33

标签: android events textview

我正在尝试在android中处理事件软键盘 通过这段代码:

   public class MainActivity extends Activity implements OnKeyListener  {
     EditText editText1;
     EditText editText2;
          public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
          editText1 = (EditText) findViewById(R.id.editText1);
          editText1.setOnKeyListener(this);
          editText2 = (EditText) findViewById(R.id.editText2);
          editText2.setOnKeyListener(this);
        //  InputMethodManager imm = (InputMethodManager)       getSystemService(Context.INPUT_METHOD_SERVICE);
        // imm.showSoftInput(editText1, InputMethodManager.SHOW_IMPLICIT);
           }
          public boolean onKey(View view, int keyCode, KeyEvent event) {
              if (keyCode == KeyEvent.KEYCODE_B|| keyCode ==KeyEvent.KEYCODE_5) 
              {

                  editText2.setText("hello");  
                   return true;
              }


              return false; // pass on to other listeners.
             }
        }

但是当我按b或任何按键时都不会产生任何东西

当我按下数字键时生成事件

请任何人帮助我并编辑我的代码。

感谢您的帮助,但我托盘代码而不是工作,而且是新代码:

public class MainActivity extends Activity   {
     EditText editText1;
     EditText editText2;
          public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.activity_main);
          editText1 = (EditText) findViewById(R.id.editText1);

          editText2 = (EditText) findViewById(R.id.editText2);

        //  InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        // imm.showSoftInput(editText1, InputMethodManager.SHOW_IMPLICIT);
           }
          public boolean onKeyDown(int keyCode, KeyEvent event) {
              if (keyCode == KeyEvent.KEYCODE_B|| keyCode ==KeyEvent.KEYCODE_5) 
              {

                  editText2.setText("hello");  
                   return true;
              }


              return false; // pass on to other listeners.

        }

        }

请关注我的问题 我的问候

1 个答案:

答案 0 :(得分:1)

来自http://developer.android.com/reference/android/view/KeyEvent.html

*由于软输入法可以使用多种创造性的输入文本方式,因此无法保证软键盘上的任何按键都会产生关键事件:这由IME自行决定,并且不鼓励发送此类事件的事实。您永远不应该依赖于在软输入方法上接收任何键的KeyEvent。特别是,默认软件键盘永远不会向任何针对Jelly Bean或更高版本的应用程序发送任何键事件,并且只会将删除和返回键的某些按键发送给目标为Ice Cream Sandwich或更早版本的应用程序。请注意,无论版本如何,其他软件输入方法都可能永远不会发送关键事件。如果您需要与软件键盘进行特定交互,请考虑使用IME_ACTION_DONE之类的编辑器操作,因为它可以让用户更清楚地了解应用程序对按键操作的反应。*

因此,大多数密钥都不会生成任何KeyEvent。

要捕获按下的软键盘,您可以尝试

@Override public boolean dispatchKeyEvent(KeyEvent event) 
{ 
    int keyCode = event.getKeyCode();
    if (keyCode == KeyEvent.KEYCODE_B|| keyCode ==KeyEvent.KEYCODE_5) 
          {

              editText2.setText("hello");  

          }
    return super.dispatchKeyEvent(event); 
} 

或者如果要在软键盘处理之前进行处理,则密钥在dispatchKeyEventPreIme(KeyEvent事件)中使用相同的代码