Клавиша Backspace События не запускаются в веб-просмотре Android 4.1+

В веб-просмотре или браузере по умолчанию я могу получать события клавиш возврата (keyup, keydown и keypress) только тогда, когда ввод не пуст. Похоже, это ошибка Android 4.1+.

Вы можете попробовать эту страницу ниже (открыть ее на устройствах Android) http://javascript.info/tutorial/keyboard-events#test-stand-test-stand

Я попробовал ответ здесь и здесь, создав собственное InputConnection.

Теперь это работает, я могу получать события клавиши возврата, даже если ввод пуст, но есть побочные эффекты:

Я больше не могу вводить слова и фразы (1-я и 2-я картинки),

Я могу вводить только одну букву или символ за раз (3-е изображение).

введите здесь описание изображениявведите здесь описание изображения введите здесь описание изображения

Как я могу это исправить, есть ли обходной путь? Спасибо.


person Doctor.Who.    schedule 30.04.2014    source источник


Ответы (2)


Я не знаю о вашем случае, но в моем случае на клавиатуре qwerty есть события backspace keydown / keyup, но числовые не вызывают события возврата клавиши backspace. Моя версия Android 4.4.2. И я изменил код, который вы использовали, из тех двух сообщений, которые вы упомянули. так. Просто используйте этот код, и ваши ключевые события Backspace будут запущены

Это расширенный класс веб-просмотра, в котором мы определяем наш собственный onCreateInputConnection, а ExtenderInputConnection — это мой класс, который расширяет базовое входное соединение, и его код также приведен ниже.

@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
    super.onCreateInputConnection(outAttrs);
    //This Code is for showing Decimal point in numeric Keyboard
    if ((outAttrs.inputType & InputType.TYPE_CLASS_NUMBER) == InputType.TYPE_CLASS_NUMBER)
    {
        outAttrs.inputType |= InputType.TYPE_NUMBER_FLAG_DECIMAL;
    }
    else
    {
        InputConnection connection = super.onCreateInputConnection(outAttrs);
        return connection;
    }
     return new ExtenderInputConnection(this,false);
}

Вот код для ExtenderInputConnection

import android.text.InputType;
import android.view.KeyEvent;
import android.view.View;
import android.view.inputmethod.BaseInputConnection;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputConnection;

public class ExtenderInputConnection extends BaseInputConnection implements InputConnection{

public ExtenderInputConnection(View targetView, boolean fullEditor) {
    super(targetView, fullEditor);
    // TODO Auto-generated constructor stub
}

@Override
public boolean deleteSurroundingText(int beforeLength, int afterLength) {       
    if (beforeLength == 1 && afterLength == 0) {
        // backspace
        return super.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL));
    }

    return super.deleteSurroundingText(beforeLength, afterLength);
    }
}
person Syed Wajahat Ali    schedule 19.09.2014
comment
это исправило для меня кнопку «Перейти» и «Далее», однако она сломала кнопку «Далее» для числового ввода. Есть идеи? - person spy; 14.07.2015

Вам нужно использовать события onkeyup/keydown/keypress? Они не очень хорошо подходят для модели мобильного ввода, поэтому существуют эти ошибки. Будут ли события композиции лучшим решением для вас[1]?

[1] https://developer.mozilla.org/en-US/docs/Web/API/CompositionEvent

person ksasq    schedule 30.04.2014
comment
Спасибо за ваш ответ. Я пытался использовать composerEvents на этой странице с помощью своего телефона Android, но композитные события не запускались. jsfiddle.net/A6Ctj/5 - person Doctor.Who.; 30.04.2014