【问题标题】:Why softkeyboard won't display in Fragment with WebView为什么软键盘不会在带有 WebView 的片段中显示
【发布时间】:2011-04-18 21:05:52
【问题描述】:

我正在使用兼容性包,我有一个 Fragment,它在 onCreateView 中返回一个 WebView。问题是如果在Activity 的onCreate 期间未添加片段,那么当在WebView 内单击文本框时,不会显示软键盘。如果在添加自定义 web 片段后旋转设备,重新创建活动,则在单击文本字段时会显示软键盘。

需要明确的是,这里有两种不同的场景

public void onCreate(Bundle state){
   if(state == null){
      WebFragment web = new WebFragment();
      getSupportFragmentManager.beginTransaction().add(android.R.id.content, web).commit();
   }
}



public void onClick(View v){
      WebFragment web = new WebFragment();
      getSupportFragmentManager.beginTransaction().add(android.R.id.content, web).commit();
}

在第一种情况下,在 Activity onCreate 方法期间添加片段时,片段中包含的 WebView 会在按下文本字段时正常工作。但是,在第二个示例中,单击 web 视图中的文本字段时没有任何反应,除非您在显示 web 视图后旋转设备。有人可以提供一个解决方案吗,如果我必须为我的片段创建一个新的活动才能正常工作,它首先会超出片段的目的。

【问题讨论】:

  • @schwiz:我没有看到此示例应用程序存在此问题:github.com/commonsguy/cw-advandroid/tree/master/Honeycomb/… 这是一个 RSS 提要阅读器,在 WebView 内的 WebView 中显示提要项的页面@。因此,此片段是使用基于ListFragment 项目点击的事务动态添加的。软键盘很好用。
  • @CommonsWare 感谢您的回复,通过进行这些更改pastebin.com/4WGhD0Mk,我能够在您链接的项目中重现此错误@我没有平板电脑,因此无法在三重疼痛设置,但我担心的是手机。
  • @schwiz: 我不知道res/layout/test.xml 是什么,也不知道test() 方法是怎么调用的。请考虑压缩一个完整的项目来演示问题并将其发布到某个地方。
  • @CommonsWare 抱歉,它只是一个简单的布局,带有一个带有属性 onClick="test" 的按钮 pastebin.com/2kFaa6cA。这是完整的项目让dl.dropbox.com/u/673057/FeedFragments.tar.gz
  • @schwiz:软键盘在 XOOM 上的示例代码中看起来非常好。不过,我可以在手机上重现您的问题,例如 Nexus S 和 Droid X。我会尝试清理并提交错误报告。

标签: android webview backwards-compatibility android-fragments


【解决方案1】:

将此添加到 Fragment 的 onCreateView 方法中

webview.setOnTouchListener(new View.OnTouchListener() {
    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;
    }
});  

使用 android 2.3.3 和 3.2.0 测试。

基于issue #7189StackOverflow

【讨论】:

  • 今天早上在bug里看到了,需要试试谢谢!
【解决方案2】:

solution by RuslanK 也为我工作

创建一个扩展 WebView 的类

private class MyWebView extends WebView {

public MyWebView(Context context, AttributeSet attrs) {
    super(context, attrs);
 }

// Note this!
@Override
public boolean onCheckIsTextEditor() {
    return true;
}

@Override
public boolean onTouchEvent(MotionEvent ev)     {
    switch (ev.getAction())         {
        case MotionEvent.ACTION_DOWN:
        case MotionEvent.ACTION_UP:
            if (!hasFocus())
                requestFocus();
        break;
    }

    return super.onTouchEvent(ev);
}
}

然后将您的视图添加到 xml 布局中:

<com.example.view.MyWebView
    android:id="@+id/vw"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

以此类推,以此类推……

MyWebView webView = (MyWebView) parent.findViewById(R.id.vw);
webView.setVerticalScrollBarEnabled(false);
webView.setHorizontalScrollBarEnabled(false);
webView.requestFocus(View.FOCUS_DOWN);
webView.loadUrl(url);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-11
    • 2013-04-29
    • 1970-01-01
    • 1970-01-01
    • 2017-01-06
    • 2015-12-10
    • 1970-01-01
    相关资源
    最近更新 更多