6

我正在使用兼容性包,并且我有一个在 onCreateViewFragment中返回的人。WebView问题是如果在 onCreate 期间没有添加片段,Activity那么当在软键盘内部单击文本框时,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 视图后旋转设备。有人可以提供一个解决方案吗,如果我必须为我的片段创建一个新的活动才能正常工作,它首先会击败片段的目的。

4

2 回答 2

11

将此添加到 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 测试。

基于问题 #7189StackOverflow

于 2011-08-12T19:48:43.773 回答
0

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);
于 2013-10-21T13:19:10.780 回答