我创建了一个简单的iPhone / Android应用,包含一个普通的webview。此webview调用我的网站。
在我的网站上有几种输入类型= text或textarea的表单。当它们位于页面底部时,我遇到了问题!
1)在我的iPhone应用程序中,键盘将自动出现并将文本框推送到手机屏幕的可见区域。所以没什么可做的。
2)但是在我的Android应用程序中,文本框将保持在同一个位置,并最终被我的键盘隐藏。因此,用户唯一的选择是输入“blind”。
我该如何解决这个问题?还有其他人遇到过这个问题吗?
答案 0 :(得分:42)
这就是我解决问题的方法。正如Venky所说,你必须添加
android:windowSoftInputMode="adjustResize"
到AndroidManifest.xml文件中的标记。但在我们的案例中,这还不够。确保你也可以使用你的观点,网络浏览等来做到这一点。然后我们终于让它发挥作用了。
答案 1 :(得分:25)
我疯了,android:windowSoftInputMode="adjustResize"
可能会有所帮助,但请确保您的应用无法全屏显示。
删除我的应用程序的全屏解决了布局使用软键盘调整大小的问题。
<item name="android:windowFullscreen">false</item>
答案 2 :(得分:3)
这样可行:
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
答案 3 :(得分:2)
在解决这个问题时我学到的东西很少--- 1.主题样式不应包含Fullscreen True 2.添加android:windowSoftInputMode =&#34; adjustResize&#34; 3.删除android:scrollbars =&#34; none&#34;是...... 干杯!
答案 4 :(得分:1)
就我而言,取得的成功是:
在下面添加清单,webview和片段:
android:windowSoftInputMode="adjustResize"
使用NON FullScreen主题,如下所示:
<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>
答案 5 :(得分:0)
是的,在使用Webview时遇到同样的问题,我的是对模态的输入。 Textfield没有关注&#34;在键盘上方。 解决方案是延迟函数调用。希望有人发现这很有用。
$("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);
}
答案 6 :(得分:0)
请注意除了建议的答案
android:windowSoftInputMode="adjustResize"
当您处于身临其境模式时,不正在工作
答案 7 :(得分:0)
对于全屏模式下的活动,android:windowSoftInputMode =“ adjustResize”将不起作用。
https://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#FLAG_FULLSCREEN
全屏窗口将忽略该窗口的softInputMode字段的SOFT_INPUT_ADJUST_RESIZE值;窗口将保持全屏状态,并且不会调整大小。
我在活动中使用以下方法通过设置底部填充来调整布局的大小:
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);
}
}
}
});
}