我正在使用兼容性包,我有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在按下文本字段时应该正常工作。但是,在第二个示例中,单击webview中的文本字段时没有任何反应,除非在显示webview后旋转设备。有人可以提供一个解决方案,如果我必须为我的片段创建一个新的活动才能正常工作,它首先会击败片段的目的。
答案 0 :(得分: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测试。
答案 1 :(得分:0)
同样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);