Android 数字输入字段上的空格键事件行为?

Android 数字输入字段上的空格键事件行为?,android,events,keyboard,android-edittext,Android,Events,Keyboard,Android Edittext,我用android:inputType=“number”属性创建了两个EditText 在这里,我使用的是硬件键盘,所以当我在textField上执行空格键事件时,焦点控制直接从editText视图切换到屏幕的其他随机视图。在正常的文本字段类型中,它将其作为另一个字符,这很好 任何人都知道如何使用空格键事件来保持对同一字段的关注。使用editText.setInputType(InputType.TYPE\u CLASS\u NUMBER)可能会解决您的问题。使用android:imeOptio

我用android:inputType=“number”属性创建了两个EditText

在这里,我使用的是硬件键盘,所以当我在textField上执行空格键事件时,焦点控制直接从editText视图切换到屏幕的其他随机视图。在正常的文本字段类型中,它将其作为另一个字符,这很好


任何人都知道如何使用空格键事件来保持对同一字段的关注。

使用editText.setInputType(InputType.TYPE\u CLASS\u NUMBER)可能会解决您的问题。

使用android:imeOptions=“actionNext”更改/添加editText属性,如下所示

<EditText
    android:id="@+id/edit_text"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" 
    android:imeOptions="actionNext"
    android:inputType="text" /> 

因此,您的问题似乎与EditText的“输入”类型无关,而是来自键盘的按键事件

所以“希望”这会为您解决问题(通过按下“空格”按钮“跳过”下一个”事件)

这可能就是正在发生的事情(没有XML很难说)

所以我发现了一些可以帮助你找出模式的东西,可能会导致解决它…从

如果您的XML(或等效代码)中有
android:nextFocus….
设置和/或物理键盘“space”也在发送信号(或其他类似的IME操作)


如果下一步的
EditorInfo.IME\u操作\u
不是导致您出现问题的IME操作,那么您可以尝试以下操作…以确定问题所在

发件人:

如果您有物理键盘,您可以使用它来检测按键事件并适当地处理它们

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) {
    log.d("main","KeyPress:" + keyCode);
    if (event != null ) { log.d("main","KeyPress:" + event.getKeyCode() ); }
   // if you want to 'handle' the keyPess here, best to use switch like below
   // switch (keyCode) {
   //     case KeyEvent.KEYCODE_A:
    //    {
    //        //your Action code
    //        return true;
    //    }
   /// }
    return super.onKeyDown(keyCode, event);
}
但是…如果你有软件键盘,你需要使用addTextChangedListener/TextWatcher,因为实际按键被EditText“吃掉”(从我在另一篇文章中看到的,但从我的测试来看似乎是正确的)

输入“空格”时,您可以覆盖EditText的功能

在“软件键盘”中,这似乎很容易,但物理键盘似乎更难

与此问题类似(但“空格”而不是“回车”)


这可以帮助您确定正在更改的焦点的“模式”。它是随机的还是非随机的(很可能不是随机的,但可能是有趣的)


而不是安卓:inputType=“number”put
“安卓:数字=“0123456789
。谢谢大家,但正如这里提到的,在这种情况下,它将允许插入十进制,我不想要…但为什么空格键事件会产生这种行为…这就是问题所在…对此有什么想法吗?好的,让我问你,EditText字段接受什么符号?我有你的gOOdy,但如果我只使用这些数字,那么焦点就不会从当前视图跳到另一个视图。所以我使用类型作为“数字”。我处理这些数字字段的键事件,现在它解决了我的问题…但是为什么空格键事件显示这样的行为将是一件有趣的事情。从XML发布你的EditText我尝试了很多东西,imeOptions,inputType,digits。。。所有人都有相同的行为。目前看到你们的答案,我把它改成了你们给定的代码,问题还是一样的。如果可能,请在UI中保留5-10个数字编辑文本,并按空格键。你会知道的。发布你的布局file@MKJParekh你是否尝试过“mawalker”@Shubh mawalker的答案建议实现listener的解决方案,我已经指定,我不需要在每个屏幕上为我的100个视图分配listener。所以答案可能会解决问题,但对我来说不是。Bounty是由So自动授予的,上面的答案仍然不能解决我的问题或任何相关的问题,因为每个android开发人员都会理解,如果您定义运行时或xml,这一切都是一样的,所以上面的答案没有任何积极意义。请不要认为获奖答案是正确答案。我会一直等待新的回复帖子,如果有人能解决我的问题,我会在事后奖励500分。因为人们似乎在做虚假的向上投票,并得到一半的奖励分数。谢谢你的回答,但我不想为我的100个视图分配侦听器。你可能可以为每个视图创建一个侦听器(忽略物理键盘上的空间)(从而不会占用太多代码或ram等)
 // do for both EditText(s)
 editText1.setOnEditorActionListener(new TextView.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        log.d("main","KeyPress:"+ actionID);
        if (event != null ) { log.d("main","KeyPress:" + event.getKeyCode() ); }
            if ( actionId == EditorInfo.IME_ACTION_NEXT) {
                // do 'nothing' or 'add a space' if you want that
                return true;
            }
            return false;
        }
    });
@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) {
    log.d("main","KeyPress:" + keyCode);
    if (event != null ) { log.d("main","KeyPress:" + event.getKeyCode() ); }
   // if you want to 'handle' the keyPess here, best to use switch like below
   // switch (keyCode) {
   //     case KeyEvent.KEYCODE_A:
    //    {
    //        //your Action code
    //        return true;
    //    }
   /// }
    return super.onKeyDown(keyCode, event);
}
mMyEditText.addTextChangedListener(new TextWatcher()
{
    public void afterTextChanged(Editable s) 
    {
    }
    public void beforeTextChanged(CharSequence s, int start, int count, int after) 
    {
        /*This method is called to notify you that, within s, the count characters beginning at start are about to be replaced by new text with length after. It is an error to attempt to make changes to s from this callback.*/ 
    }
    public void onTextChanged(CharSequence s, int start, int before, int count) 
    {
    }
);
// try this to see
View.OnFocusChangeListener changeListener = new View.OnFocusChangeListener()                
    {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            log.d("YourClassName", "FocusChanged" + hasFocus)
        }
    };

 EditText1.setOnFocusChangeListener(changeListener);
 EditText2.setOnFocusChangeListener(changeListener);
 Button.setOnFocusChangeListener(changeListener);
 // ... etc... (add to views to see if there is pattern)