Текстовое поле, скрытое под клавиатурой в веб-браузере Android - PullRequest
48 голосов
/ 11 августа 2011

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

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

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

2) Но в моем приложении для Android текстовое поле останется на том же месте и в конечном итоге будет скрыто моей клавиатурой. Поэтому единственное, что есть у пользователей, это набрать «вслепую».

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

Ответы [ 8 ]

43 голосов
/ 25 августа 2011

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

android:windowSoftInputMode="adjustResize"

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

25 голосов
/ 28 января 2013

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

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

<item name="android:windowFullscreen">false</item>
3 голосов
/ 14 сентября 2016

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

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

2 голосов
/ 08 сентября 2017

Мало что я узнал при решении этой проблемы --- 1. Стиль темы не должен содержать Fullscreen True 2. Добавить android: windowSoftInputMode = "AdjustResize" 3. Удалить android: scrollbars = "none" is any ...Ура!

1 голос
/ 26 января 2018

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

  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.
0 голосов
/ 23 мая 2019

Для действий в полноэкранном режиме 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);
                    }
                }
            }
        });
    }
0 голосов
/ 24 января 2018

Помните, что кроме предложенных ответов

android:windowSoftInputMode="adjustResize"

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

0 голосов
/ 11 мая 2016

Да, у меня была такая же проблема при работе с 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);

}

...