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

时间:2013-07-30 11:20:27

标签: android events keyboard android-edittext

我创建了两个带有"android:inputType="number"属性的EditText。

这里我使用硬件键盘,所以当我在textField上执行Space Key事件时,焦点控制直接从editText视图转移到屏幕的其他随机视图。在普通的文本字段类型中,它将它作为另一个字符,没关系。

任何人都知道如何使用Space键事件来保持对同一领域的关注。

3 个答案:

答案 0 :(得分:3)

使用editText.setInputType(InputType.TYPE_CLASS_NUMBER)可能可以解决您的问题。

答案 1 :(得分:2)

使用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" /> 

或者android:imeOptions="actionNone"用于EditText的默认行为

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

答案 2 :(得分:2)

所以看起来你的问题与你的EditText的'input'类型没有关系,而是来自键盘的按键事件....

所以'希望'这应该可以解决你的问题(通过'跳过'按下'空格'按钮的'下一个'事件。)

 // 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;
        }
    });

这很可能发生了什么(没有你的XML很难说)

所以我找到了一些可以帮助你找出模式的东西+可能导致解决它......来自https://stackoverflow.com/a/17990096

如果您的XML中存在android:nextFocus....设置(或代码中的等效设置)和/或物理键盘'space'也表示IME_ACTION_NEXT(或其他类似的IME操作)

如果EditorInfo.IME_ACTION_NEXT不是导致您出现问题的IME操作,那么您可以尝试这样做......以确定是什么。

来自:https://stackoverflow.com/a/4171427

如果你有 PHYSICAL 键盘,你可以使用它来检测keyDown事件并适当地处理它们,

@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“吃掉”(从我在另一篇文章中看到,但似乎从我的测试来看是正确的。)

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) 
    {
    }
);

您可以覆盖输入“空格”时EditText执行的操作。

在“软件键盘”中这似乎很容易,但物理键盘似乎有点困难。

https://developer.android.com/reference/android/widget/TextView.OnEditorActionListener.html

与此问题类似(但'空格'而非'输入')Android - Handle "Enter" in an EditText

这可以帮助您确定要更改焦点的“模式”。如果它是随机的或非随机的(最可能是随机的,但可能是“有趣的”调查)

http://developer.android.com/reference/android/view/View.OnFocusChangeListener.html

// 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)