Java 为EditText实现自定义Numpad
我有一个带有numpad(键0-9,Ok和Delete)的应用程序,它在屏幕上始终可见 当用户将焦点设置在具有数字输入方法的Java 为EditText实现自定义Numpad,java,android,Java,Android,我有一个带有numpad(键0-9,Ok和Delete)的应用程序,它在屏幕上始终可见 当用户将焦点设置在具有数字输入方法的EditText上时,则在numpad上按下的键应应用于聚焦的EditText 我目前的方法是使用数字输入法在每个EditText上设置一个OnFocusChanged侦听器,然后记住聚焦控件: EditText txt1 = (EditText) findViewById(R.id.editText1); txt1.setOnFocusChangeLis
EditText
上时,则在numpad上按下的键应应用于聚焦的EditText
我目前的方法是使用数字输入法在每个EditText
上设置一个OnFocusChanged
侦听器,然后记住聚焦控件:
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
}});
然后,当按下numpad键时,该键将应用于聚焦的控件
对我来说,这似乎有点复杂,是否有一种更简单的方法可以自动(无需焦点更改侦听器)处理所有带有数字输入法的EditText
小部件
其次,有没有一种方法可以为那些只使用数字输入的EditText
小部件禁用软键盘?我认为您可以将其用于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);
}
});
}
}
private void keyPressed(int keyCode) {
KeyEvent event = new KeyEvent(KeyEvent.ACTION_DOWN, keyCode);
numberBox.onKeyDown(keyCode, event);
}