我正在尝试在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.
}
}
请关注我的问题 我的问候
答案 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事件)中使用相同的代码