我正在开发一个Android应用程序,它使用WebView显示Facebook的登录页面。页面加载很漂亮,我可以选择用户名/密码文本框,但输入它们将无法正常工作。也就是说,它们肯定具有输入焦点(它们具有橙色焦点高亮框和闪烁的光标),但输入它们绝对没有任何效果。我不确定,但我想也许表格按钮也在播放 - 它们似乎只是刷新页面,而不是提交表格。
为了清楚起见,虽然我对Facebook的运行特别感兴趣,但我确信这不是Facebook问题,因为其他网站(谷歌等)也表现出同样的行为。
有没有人有任何想法可能是什么问题?
答案 0 :(得分:44)
事实证明,显然WebView没有焦点是问题。
我发现使用箭头键来关注文本框会导致它们工作,所以我认为某个地方有一个没有焦点的问题,很可能是WebView没有焦点。果然,添加以下行似乎可以解决问题:
webView.requestFocus(View.FOCUS_DOWN);
我仍然无法解释为什么问题出现在第一位 - 文本框应该有效,无论他们是通过点击还是通过“箭头”获得焦点 - 但至少我有一个解决方案,似乎工作。
感谢您的输入wf。
答案 1 :(得分:15)
@Mac这一行:
webView.requestFocus(View.FOCUS_DOWN);
解决了你的问题?我不是在我的情况下,但这样做:
mWebView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_UP:
if (!v.hasFocus()) {
v.requestFocus();
}
break;
}
return false;
}
});
仅供参考。
答案 2 :(得分:11)
这些大多数都有
webview.getSettings().setJavaScriptEnabled(true);
webview.getSettings().setUseWideViewPort(true);
webview.requestFocus(View.FOCUS_DOWN);
如果仍然无效,请使用
下面的替代方案备选方案1
webview.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_UP:
if (!v.hasFocus()) {
v.requestFocus();
}
break;
}
return false;
}
});
备选方案2
webview.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_UP:
v.requestFocusFromTouch();
break;
}
return false;
}
});
答案 3 :(得分:8)
我不知道我的情况和你的情况完全相同,
我发现添加一个css行可以解决问题。
我只是添加
input{
-webkit-user-select: text;
}
到我的CSS,然后问题解决了!
答案 4 :(得分:6)
我很遗憾地说这些都不适合我。我想这取决于你的背景。在我的情况下,问题发生在一个html弹出窗口(绝对div)。所有其他输入字段都正常。
打破问题我发现它是webview中的一个错误。包含其他固定/绝对位置div的固定定位div在页面中打破输入字段。因此,我措辞了你的规则(不要犹豫重新制定):
如果在你的页面中你有一个固定的定位div而且没有默认定位的嵌套div(即绝对,固定等),你页面中包含输入字段的任何以下绝对定位div都会得到出乎意料的行为。
因此,将输入字段放在页面顶部(如果可以)或避免嵌套在其他固定/绝对div中的绝对div。这应该会有所帮助。
如果您需要更多解释和可能的解决方法,我在我的博客上发布了一些内容:http://java-cerise.blogspot.com/2012/02/android-web-view-inputfields-refuse-to.html
答案 5 :(得分:5)
在我的情况下,来自后一个堆栈中的前一个片段的TabHost
在每次按键时都从WebView输入中窃取焦点。以下是我修复它的方法:
tabHost.addOnAttachStateChangeListener(new OnAttachStateChangeListener() {
@Override
public void onViewDetachedFromWindow(View v) {}
@Override
public void onViewAttachedToWindow(View v) {
tabHost.getViewTreeObserver().removeOnTouchModeChangeListener(tabHost);
}
});
有关该主题的更多信息,请参阅https://code.google.com/p/android/issues/detail?id=2516。
答案 6 :(得分:2)
不确定是否是问题,因为其他网站也显示相同的行为,但是你启用了javascript吗? WebView默认情况下不启用它。
WebView webView = (WebView)findViewById(R.id.yourWebView);
webView.getSettings().setJavaScriptEnabled(true);
答案 7 :(得分:2)
我尝试了这里发布的所有其他解决方案,但都没有。
相反,我扩展了WebView并覆盖了强制KeyEvents分派的InputConnection。
@Override
public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
return new BaseInputConnection(this, false);
}
答案 8 :(得分:1)
我遇到了这个问题,因为我在webview加载第一页时显示启动图像。我在onPageFinished中将webview设置为View.VISIBLE,但是尽管能够聚焦文本框,但您无法输入它们。我也可以确认将webview requestFocus设置为View.FOCUS_DOWN的修复工作正常。
NB。如果我在onResume中将webview设置为View.VISIBLE,则问题不会出现,但在我的情况下,启动图像会很快消失。
答案 9 :(得分:1)
我在4.1.2和4.2.2中加载了一个页面,经过一天的搜索,我找到了答案here(评论#18)
引自原帖:
我使用WebView
呈现的各种网页中的某些网页不适合WebView
,因此div(或其他一些html组件)无形地放在输入上领域。尽管输入字段在触摸时显示为选中状态,但它们不允许输入文本(即使我确实设法使用跟踪球获得软键盘)。
所以解决方案。
webview.getSettings().setUseWideViewPort(true);
这不会完全阻止这个问题,但会使视图更像是一个PC浏览器,它们是为哪些网站设计的。覆盖变化较小。
答案 10 :(得分:0)
我发现了一个可能不同的问题,但听起来很相似。在android 2.3本机浏览器中,如果页面上有固定的位置元素,它有时会破坏选择框。
2.3设备的此问题的解决方法是永远不允许固定位置父级的空子元素。因此,
<div style="position:fixed">
<div>
<span>not empty</span>
<span></span>
</div>
</div>
会变成
<div style="position:fixed">
<div>
<span>not empty</span>
<span> </span>
</div>
</div>
这解决了我的问题。
不知道这是否是你问题的问题,这是事后一年多了,但我想分享一下,因为我正在处理应用程序上的另一个固定位置问题,并且我还没有找到解决方法。
答案 11 :(得分:0)
在我的上下文(包含外部URL的webview)中,此片段有效:
webview.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_UP:
v.requestFocusFromTouch();
break;
}
return false;
}
});
错误是因为每次触摸webview都失去了焦点!
答案 12 :(得分:0)
我遇到类似的问题,文本输入在webview上不起作用。当您专注于文本输入时,它会显示键盘,但您无法键入任何字符。
经过长时间的搜索解决方案,我发现这解决了这个问题:
body {
-webkit-transform: translate3d(0,0,0);
-moz-transform: translate3d(0,0,0);
-ms-transform: translate3d(0,0,0);
-o-transform: translate3d(0,0,0);
transform: translate3d(0,0,0);
}
据我了解,此规则使某些设备运行其硬件加速。 有关translate3d(0,0,0)here.
的更多信息另一方面,根据此article,不建议在任何地方使用GPU加速。
答案 13 :(得分:0)
默认情况下,在 Android 中,Webview 允许用户使用基本配置进行输入:-
android:focusable="true"
android:focusableInTouchMode="true"
& 启用 JavaScript,但确保没有任何 活动/片段级别可聚焦性阻塞,就我而言
android:descendantFocusability="blocksDescendants"
刚刚删除了这个,对我有用。因此,请交叉检查此类情况并相应地修复它们。
答案 14 :(得分:-1)
如果我们在EditText
处理WebView
,那么v.requestFocusFromTouch ()
如果我们必须USER_AGENT
编写Mozilla / 5.0(X11; Linux i686)并且将会如果是Mozilla / 5.0(X11; Linux x86_64)。
答案 15 :(得分:-1)
这也发生在我的项目中。我尝试了以上所有方法,但没有一种能有效。最后,我通过使用对话框主题活动替换了本机Dialog解决了这个问题。希望这可以帮助别人!