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

Текстовое поле скрыто под клавиатурой в веб-браузере Android

Я создал простое приложение для iPhone/Android, содержащее обычный веб-просмотр. Этот веб-просмотр вызывает мой сайт.

На моем веб-сайте есть несколько форм с типом ввода = текст или текстовое поле. У меня проблема с теми, когда они находятся в нижней части страницы!

1) В моем приложении iPhone клавиатура автоматически появится и нажмите текстовое поле в видимую область экрана телефона. Так что нечего делать.

2) Но в моем приложении Android текстовое поле останется на том же месте и, в конце концов, скрывается моей клавиатурой. Таким образом, единственное, что есть у пользователей, это набрать "blind".

Как я могу это исправить? Кто-нибудь еще столкнулся с этой проблемой?

4b9b3361

Ответ 1

Вот как я решил проблему. Как сказал Венки, вы должны добавить

android:windowSoftInputMode="adjustResize"

к вашему тегу в файле AndroidManifest.xml. Но в нашем случае этого было недостаточно. Удостоверьтесь, что вы делаете это также с вашими взглядами, веб-просмотрами и т.д. Затем мы, наконец, сделали работу.

Ответ 2

Я с ума сошел, ничего не работает android:windowSoftInputMode="adjustResize" может помочь, но обязательно, чтобы ваше приложение не было в полноэкранном режиме.

Удаление полноэкранного режима для моего приложения решило проблему с изменением размера макета с помощью softkeyboard.

<item name="android:windowFullscreen">false</item>

Ответ 3

Это будет работать:

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

Ответ 4

Немного вещей, которые я узнал, решая эту проблему --- 1. Стиль темы не должен содержать Fullscreen True 2. Добавить android: windowSoftInputMode = "adjustResize" 3. Удалить андроид: scrollbars = "none" - это любой... Ура!

Ответ 5

В моем случае успехи достигнуты:

  1. Добавление ниже, чтобы манифест, веб-просмотр и фрагмент:

    android:windowSoftInputMode="adjustResize"
    
  2. Использование NON FullScreen Theme, например ниже:

    <style name="AppTheme" parent="android:Theme.Black.NoTitleBar">
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowActionBar">false</item>
        <item name="android:windowFullscreen">false</item>
    </style>
    
  3. НЕ использовать ScrollView через WebView.

Ответ 6

Да, с той же проблемой работала с Webview, моя была с поданной на модальной форме. Текстовое поле не "фокусировалось" над клавиатурой. Решение заключалось в том, чтобы отсрочить вызов функции. Надеюсь, что кто-то найдет это полезное.

   $("body").on("click", ".jstree-search-input", function () {  

    setTimeout(function(){ 
        androidScroll(); 
    }, 500);
    });

Как вы можете видеть, он используется для ввода jstree...

   function androidScroll() {
    // Webview focus call (pushes the modal over keyboard)
        $('.control-sidebar-open ').scrollTop($('.control-sidebar-open ')[0].scrollHeight);

}

Ответ 7

Остерегайтесь этого, кроме предложенных ответов

android:windowSoftInputMode="adjustResize"

Не работает, когда вы находитесь в режиме погружения

Ответ 8

Для действий в полноэкранном режиме android: windowSoftInputMode = "AdjustResize" не будет работать.

https://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#FLAG_FULLSCREEN

Полноэкранное окно будет игнорировать значение SOFT_INPUT_ADJUST_RESIZE для поля окна softInputMode; окно останется полноэкранным и не изменится.

Я использую следующий метод в упражнении, чтобы изменить размер макета, установив нижний отступ:


    public void adjustResizeOnGlobalLayout(@IdRes final int viewGroupId, final WebView webView) {
        final View decorView = getWindow().getDecorView();
        final ViewGroup viewGroup = (ViewGroup) findViewById(viewGroupId);

        decorView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            public void onGlobalLayout() {
                DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
                Rect rect = new Rect();
                decorView.getWindowVisibleDisplayFrame(rect);
                int paddingBottom = displayMetrics.heightPixels - rect.bottom;

                if (viewGroup.getPaddingBottom() != paddingBottom) {
                    // showing/hiding the soft keyboard
                    viewGroup.setPadding(viewGroup.getPaddingLeft(), viewGroup.getPaddingTop(), viewGroup.getPaddingRight(), paddingBottom);
                } else {
                    // soft keyboard shown/hidden and padding changed
                    if (paddingBottom != 0) {
                        // soft keyboard shown, scroll active element into view in case it is blocked by the soft keyboard
                        webView.evaluateJavascript("if (document.activeElement) { document.activeElement.scrollIntoView({behavior: \"smooth\", block: \"center\", inline: \"nearest\"}); }", null);
                    }
                }
            }
        });
    }