Может ли Android WebView HTML влиять на функции клавиатуры или клавиатуры?

У меня есть веб-просмотр с формой ввода кредитной карты (со стандартными полями <input type="text" />). В разных версиях Android у меня разные клавиатуры. Кажется, что Kit-Kat не показывает клавиши Prev/Next, когда они находятся внутри формы.

  • На веб-сайте я могу повлиять на это?
  • Если нет, то следует ли рекомендовать разработчику для Android?

Пример без Prev/Next:

Тот же веб-просмотр, с Prev/Next:

enter image description here

Ответы

Ответ 1

Вы можете управлять клавиатурой из WebView, но, как говорят другие, это может не работать с любой клавиатурой. Несмотря на это, я обычно нахожу, что большинство основных клавиатур реализовало поведение, которое я хочу.

WebView имеет метод под названием onCreateInputConnection. Вы можете подключиться к этому методу и добавить (и/или удалить) флаги в inputType и/или imeOptions. Для вас доступно множество флагов.

Ознакомьтесь с параметрами EditorInfo, в частности IME_FLAG_NAVIGATE_NEXT и IME_FLAG_NAVIGATE_PREVIOUS. См. Нижеприведенное использование (которое удаляет флаги prev/next из параметров клавиатуры):

@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
    InputConnection inputConnection = super.onCreateInputConnection(outAttrs);
    outAttrs.imeOptions = outAttrs.imeOptions & ~EditorInfo.IME_FLAG_NAVIGATE_NEXT &
                ~EditorInfo.IME_FLAG_NAVIGATE_PREVIOUS; 
    return inputConnection;
}

Еще одна вещь, которую вы могли бы попробовать, - скрыть панель всех предложений, используя флаги InputType TYPE_TEXT_FLAG_NO_SUGGESTIONS. См. Пример ниже (который добавляет флаг "нет предложений" к типу ввода):

@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
    InputConnection inputConnection = super.onCreateInputConnection(outAttrs);
    outAttrs.inputType = outAttrs.inputType | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS;
    return inputConnection;
}

Есть много других доступных флажков для игры с настройкой IME непосредственно из WebView. Обратитесь к разработчику на связанные страницы, и вы, надеюсь, сможете добиться того, что вы будете выполнять на большинстве клавиатур.

Ответ 2

У вас есть минимальный контроль, но не так много. Тип элемента управления (passowrd, numeric, text) будет отправлен на мягкую клавиатуру и используется для изменения способа отображения. Однако выбор клавиатуры на основе этих параметров зависит от клавиатуры: клавиатура Google реагирует иначе, чем Swype, которая реагирует иначе, чем Swiftkey, которая реагирует иначе, чем клавиатура Samsung и т.д. Вы не можете рассчитывать на конкретное поведение.

Ответ 3

Проработав на Android Studio 3.0 (SDK API 26), ответ fooobar.com/info/381111/... падает. После поиска нашлось, что это работает.

@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
    InputConnection inputConnection = new BaseInputConnection(this, true);
    outAttrs.imeOptions = outAttrs.imeOptions & ~EditorInfo.IME_FLAG_NAVIGATE_NEXT &
            ~EditorInfo.IME_FLAG_NAVIGATE_PREVIOUS; 
    return inputConnection;
}

и

@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
    InputConnection inputConnection = new BaseInputConnection(this, true);
    outAttrs.inputType = outAttrs.inputType | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS;
    return inputConnection;
}