Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为EditText实现自定义Numpad_Java_Android - Fatal编程技术网

Java 为EditText实现自定义Numpad

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

我有一个带有numpad(键0-9,Ok和Delete)的应用程序,它在屏幕上始终可见

当用户将焦点设置在具有数字输入方法的
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);
}