0

我正在尝试通过以下代码处理 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.

        }

        }

请关注我的问题我的问候

4

1 回答 1

1

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

*由于软输入法可以使用多种创新方式输入文本,因此无法保证软键盘上的任何按键都会产生按键事件:这由 IME 自行决定,实际上不鼓励发送此类事件。您永远不应该依赖接收 KeyEvents 来获取软输入法上的任何键。特别是,默认的软件键盘永远不会向任何针对 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 事件)中使用相同的代码

于 2013-03-15T06:39:50.160 回答