Подтвердить что ты не робот

Поведение события Space Key в поле Числовой ввод?

Я создал два EditText с "android:inputType="number".

здесь я использую аппаратную клавиатуру, поэтому, когда я выполняю событие Space Key на textField, управление фокусировкой напрямую переключается с режима редактирования на другой случайный вид экрана. В обычном типе текстового поля он воспринимался как другой символ, это прекрасно.

У любого есть идея, как использовать событие Space key, чтобы сохранить фокус на том же поле.

4b9b3361

Ответ 1

Использование editText.setInputType(InputType.TYPE_CLASS_NUMBER) может решить вашу проблему.

Ответ 2

Измените/добавьте свое свойство EditText с помощью android:imeOptions="actionNext" следующим образом

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

Ответ 3

Итак, похоже, что ваша проблема не связана с типом ввода вашего EditText, а скорее с нажатиями клавиш, поступающими с клавиатуры.

Итак, "надеюсь", это должно исправить вашу проблему для вас (путем "пропускания" "следующего" события с нажатой кнопки "пробел".)

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

Итак, я нашел кое-что, что должно помочь вам разобраться в шаблоне +, возможно, приведет к его решению... из fooobar.com/info/47737/...

если в вашем XML (или эквиваленте в коде) есть параметр android:nextFocus.... и/или пробел физической клавиатуры, также сигнализирует IME_ACTION_NEXT (или другое подобное действие IME)


Если EditorInfo.IME_ACTION_NEXT не является действием IME, которое вызывает проблемы, вы можете попробовать это... для определения WHAT.

from: fooobar.com/info/309185/...

если у вас есть ФИЗИЧЕСКАЯ клавиатура, которую вы можете использовать для обнаружения событий 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

Аналогично этому вопросу (но "космос" вместо 'enter') Android - ручка "Enter" в 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)