当前位置:  开发笔记 > 编程语言 > 正文

为什么Android WebView拒绝用户输入?

如何解决《为什么AndroidWebView拒绝用户输入?》经验,为你挑选了6个好方法。

我正在开发一个Android应用程序,它使用WebView显示Facebook的登录页面.页面加载很漂亮,我可以选择用户名/密码文本框,但输入它们将无法正常工作.也就是说,它们肯定有输入焦点(它们有橙色焦点高亮框和闪烁的光标),但输入它们绝对没有任何效果.我不确定,但我想也许表单按钮也在播放 - 它们似乎只是刷新页面,而不是提交表单.

需要明确的是,虽然我对Facebook的运行特别感兴趣,但我确信这不是Facebook的问题,因为其他网站(谷歌等)也表现出同样的行为.

有没有人有任何想法可能是什么问题?



1> Mac..:

事实证明,显然WebView没有焦点就是问题.

我发现使用箭头键来关注文本框会导致它们工作,所以我认为某个地方有一个没有焦点的问题,很可能是WebView没有焦点.果然,添加以下行似乎可以解决问题:

webView.requestFocus(View.FOCUS_DOWN);

我仍然无法解释为什么问题发生在第一位 - 文本框应该有效,无论他们是通过点击还是通过"箭头"获得焦点 - 但至少我有一个似乎有效的解决方案.

感谢您的输入.


`webView.requestFocus();`为我工作.谢谢.
没有为我工作..我不认为它是焦点的问题,因为,软键盘出现,也是,光标在文本字段中闪烁.(问题是在Facebook登录页面).请咨询.

2> DiveInto..:

@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; 
        }
});

仅供您参考.


优秀.已经花了几个小时后,我节省了很多时间!谢谢.

3> touchchandra..:

这些是最有的

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;
    }

});



4> newbeeep..:

我不知道我的情况与你的情况完全相同,

我发现添加一个css行可以解决问题.

我只是补充一下

input{
    -webkit-user-select: text;
}

到我的CSS,然后问题解决了!



5> 小智..:

我很遗憾地说这些对我都没有用.我想这取决于你的背景.在我的情况下,问题发生在一个html弹出窗口(绝对div).所有其他输入字段都正常.

打破这个问题我发现它是webview中的一个错误.包含其他固定/绝对位置div的固定定位div在页面中打破输入字段.因此,我为你做了一个规则(不要犹豫重新制定):

如果在你的页面中你有一个固定的定位div,没有默认定位的嵌套div(即绝对,固定等),以下任何绝对在包含输入字段的页面中定位div将获得意外行为.

因此,将输入字段放在页面顶部(如果可以)或避免嵌套在其他固定/绝对div中的绝对div.这应该有所帮助.

如果您需要更多解释和可能的解决方法,我在我的博客上发布了一些相关信息:http://java-cerise.blogspot.com/2012/02/android-web-view-inputfields-refuse-to.html


这很有趣,有助于解释问题,但实际上并不是一个答案.我不能(例如)迫使Facebook更改其登录页面的布局,因为它导致我的应用程序出现问题...

6> Maxim Kachur..:

在我的情况下,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.

推荐阅读
惬听风吟jyy_802
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有