我有一个带有小键盘(键0-9,确定和删除)的应用程序,它总是在屏幕上可见。
当用户将焦点设置在具有数字输入法的EditText
上时,按下小键盘上的键应该应用于焦点EditText
。
我目前的方法是使用数字输入法在每个OnFocusChanged
上设置一个EditText
侦听器,然后记住焦点控件:
EditText txt1 = (EditText) findViewById(R.id.editText1);
txt1.setOnFocusChangeListener(new View.OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus)
focused = (EditText)v; // focused is a member of the Activity class
}});
然后,当按下小键盘键时,该键将应用于focused
控件。
对我而言,这似乎有点复杂,是否有一种更简单的方法可以使用数字输入法自动工作(没有焦点更改侦听器)所有EditText
小部件?
其次,是否有办法仅使用数字输入禁用那些EditText
小部件的软键盘?
答案 0 :(得分:1)
我认为您可以将onKeyDown()用于EditText(我们称之为numberBox)。
逻辑是:
假设您在集合中拥有所有数字按钮:
private ImageButton []digitButtons = new ImageButton[10];
为每个按钮设置onClickListeners:
private void setClickListenersForDigitButtons() {
for(int i=0; i < digitButtons.length; i++) {
int resId = getResources().getIdentifier(getPackageName()+":id/btn_digit_"+i, null, null);
digitButtons[i] = (ImageButton)findViewById(resId);
final int keyCode = KeyEvent.KEYCODE_0 + i;
digitButtons[i].setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
keyPressed(keyCode);
}
});
}
}
在keyPressed方法中:
private void keyPressed(int keyCode) {
KeyEvent event = new KeyEvent(KeyEvent.ACTION_DOWN, keyCode);
numberBox.onKeyDown(keyCode, event);
}