Android webview中隐藏在键盘下方的文本框
Posted
技术标签:
【中文标题】Android webview中隐藏在键盘下方的文本框【英文标题】:Textbox hidden below keyboard in Android webview 【发布时间】:2011-10-25 00:09:23 【问题描述】:我创建了一个简单的 iPhone/android 应用程序,其中包含一个普通的 webview。这个 webview 调用我的网站。
在我的网站上有几种输入类型=文本或文本区域的表单。当它们位于页面底部时,我遇到了问题!
1) 在我的 iPhone 应用程序中,键盘会自动出现并将文本框推送到手机屏幕的可见区域。所以没什么可做的。
2) 但在我的 Android 应用程序中,文本框将保持在同一个位置,并最终被我的键盘隐藏。所以用户唯一的选择就是输入“blind”。
我该如何解决这个问题?有没有其他人遇到过这个问题?
【问题讨论】:
您能否显示您遇到问题的页面底部的屏幕截图。 检查这个[链接][1]。尝试这个。这些可能会帮助你。 [1]:***.com/questions/2559273/… 感谢您的回答。在 AndroidManifest.xml 中,我在 >android:screenOrientation="portrait"android:windowSoftInputMode="adjustResize" 这里是全屏模式的解决方案:***.com/a/19494006/3248593 【参考方案1】:这就是我解决问题的方法。正如Venky所说,您必须添加
android:windowSoftInputMode="adjustResize"
到 AndroidManifest.xml 文件中的标记。但在我们的案例中,这还不够。确保您对视图、网络视图等也这样做。然后我们终于让它工作了。
【讨论】:
我面临同样的问题。是否可以以编程方式为所有视图设置标签? 嗨@andreas,尝试遵循您和 Sandro 的想法,所以我创建了<style name="StyleWindowSoftInputModeAdjustResize" > <item name="android:windowSoftInputMode">adjustResize</item> <item name="android:windowFullscreen">false</item> </style>
并将其应用到我的 web 视图 WebView webview = new WebView(this, null, R.style.StyleWindowSoftInputModeAdjustResize);
但是当我点击里面的某个输入框时没有显示软键盘在 WebView 中加载的页面...我的 WebView 位于 HorizontalScrollView 内,而后者位于垂直 ScrollView 内。
这听起来可以用于Android开发。但是 Appcelerator Titanium 的开发呢?这种东西有一个地方,但它只适用于Android应用程序,而不是移动网络应用程序(我试过)。实际上,它给了我一个错误,因为此值的命名空间不适用于移动网站:/ 如果您没有任何 Titanium 开发经验并且不知道答案,我会理解。
请注意,如果您使用windowFullscreen="true"
或android:theme="some style containing windowFullScreen=true"
,例如android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
,windowSoftInputMode
将不起作用。
除了全屏模式,将状态栏设置为半透明(android:windowTranslucentStatus = true
)也会使adjustResize
无法工作。【参考方案2】:
我快疯了android:windowSoftInputMode="adjustResize"
可能会有所帮助,但请确保您的应用不要全屏显示。
为我的应用删除全屏解决了使用软键盘调整布局大小的问题。
<item name="android:windowFullscreen">false</item>
【讨论】:
我需要我的应用全屏 - 有没有办法让它全屏(即没有标题/警报栏)并且键盘不覆盖字段? 是的,我还需要我的应用程序是全屏的。您对此有解决方案吗? 不,很抱歉,在这个问题上浪费了太多时间后,我选择不使用全屏应用程序,如果您找到任何解决方案,请添加您的解决方案。 我也有同样的问题。我希望我的应用全屏显示。 我也有android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
阻止adjustResize
工作。仅使用 android:theme="@android:style/Theme.NoTitleBar"
使 adjustResize
工作。【参考方案3】:
是的,在使用 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);
【讨论】:
【参考方案4】:这会起作用:
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
【讨论】:
【参考方案5】:在解决这个问题时我学到了一些东西 --- 1. 主题风格不应包含 Fullscreen True 2.添加android:windowSoftInputMode="adjustResize" 3. 去掉 android:scrollbars="none" is any.. . 干杯!
【讨论】:
【参考方案6】:请注意,除了建议的答案
android:windowSoftInputMode="adjustResize"
当您处于沉浸式模式时不工作
【讨论】:
【参考方案7】:在我的例子中,取得的成功是:
在manifest、webview和fragment中添加以下内容:
android:windowSoftInputMode="adjustResize"
使用非全屏主题,如下所示:
<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。
【讨论】:
【参考方案8】:对于全屏模式的activity,android:windowSoftInputMode="adjustResize" 将不起作用。
https://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#FLAG_FULLSCREEN
全屏窗口将忽略窗口的 softInputMode 字段的 SOFT_INPUT_ADJUST_RESIZE 值;窗口将保持全屏状态并且不会调整大小。
我在 Activity 中使用以下方法通过设置底部填充来调整布局大小:
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);
);
【讨论】:
它在这个答案中使用 javascript 对我有用,我以不同的方式运行它,但它就像一个魅力! document.activeElement.scrollIntoView(behavior: \"smooth\", block: \"center\", inline: \"nearest\")以上是关于Android webview中隐藏在键盘下方的文本框的主要内容,如果未能解决你的问题,请参考以下文章
Android中键盘上方的FloatingActionButton和隐藏在键盘下方的BottomNavigationView
如何使用adjustResize设置隐藏键盘下方的BottomNavigationView