Текстовое поле скрыто под клавиатурой в веб-браузере Android
Я создал простое приложение для iPhone/Android, содержащее обычный веб-просмотр. Этот веб-просмотр вызывает мой сайт.
На моем веб-сайте есть несколько форм с типом ввода = текст или текстовое поле. У меня проблема с теми, когда они находятся в нижней части страницы!
1) В моем приложении iPhone клавиатура автоматически появится и нажмите текстовое поле в видимую область экрана телефона. Так что нечего делать.
2) Но в моем приложении Android текстовое поле останется на том же месте и, в конце концов, скрывается моей клавиатурой. Таким образом, единственное, что есть у пользователей, это набрать "blind".
Как я могу это исправить? Кто-нибудь еще столкнулся с этой проблемой?
Ответы
Ответ 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
В моем случае успехи достигнуты:
-
Добавление ниже, чтобы манифест, веб-просмотр и фрагмент:
android:windowSoftInputMode="adjustResize"
-
Использование 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>
- НЕ использовать 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);
}
}
}
});
}