在网络视图上停止Android屏幕键盘弹出

时间:2015-08-13 09:17:29

标签: android android-webview android-alertdialog android-softkeyboard

我有一套AlertDialog,我可以来回走动。对话框A,对话框B(有HTML内容)和对话框C.对话框BI添加了一个Web视图来显示一些HTML内容,我想禁用键盘弹出这个特定的对话框B. HTML内容没有任何编辑文本的。      我使用过“getWindow()。setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN)” 这是第一次打开对话框时的工作。当我第一次从对话框A导航到对话框B时,对话框B不会弹出键盘。当我从A或C回到对话框B时,当我在HTML内容上滑动时,键盘会弹出。

HTML内容是基于触摸的内容。

我假设每次打开对话框时都不会执行隐藏键盘的代码。

我尝试过“SOFT_INPUT_STATE_ALWAYS_HIDDEN”和“SOFT_INPUT_STATE_HIDDEN”。

编辑:如果我在网页视图上打开谷歌,该视图有一个搜索文本字段。当我触摸编辑文本时,键盘不会弹出,即使我导航也是如此。但是当我尝试在页面上上下滚动时,键盘弹出并消失(从第二次访问对话框时发生)。

请您在每次打开此对话框B时分享您对如何隐藏键盘的想法。

@Override
@Deprecated
protected Dialog onCreateDialog(int id) {
    AlertDialog.Builder builder = new AlertDialog.Builder(this,R.style.AlertDialogCustom);
    final  Boolean pinVerficationDialogPopedUp = loginData.getBoolean("pinVerficationDialogPopedUp",
            false);

    if (pinVerficationDialogPopedUp == false) {
        switch (id) {
            case DIALOG_ADD_A_PERSON_BODY_MAP:
             try {
                    LayoutInflater inflaterBodyMap = this
                            .getLayoutInflater();
                    final View inflatorBodyMap = inflaterBodyMap
                            .inflate(
                                    R.layout.dialog_incident_window_body_map,
                                    null);
                    bodyMapWebView  = (WebView) inflatorBodyMap.findViewById(R.id.webView);

                    bodyMapWebView.getSettings().setJavaScriptEnabled(true);
                    bodyMapWebView.getSettings().setBuiltInZoomControls(true);
                    bodyMapWebView.getSettings().setSupportZoom(true);

                    /*
                    Trying to resolve issue where sometimes when the HTML page loads, it does
                    not load the whole content
                     */
                    bodyMapWebView.post(new Runnable() {
                        @Override
                        public void run() {
                            bodyMapWebView.loadUrl("file:///android_asset/bodyMap.html");
                        }
                    });

                    bodyMapWebView.addJavascriptInterface(new WebAppInterface(this), "Android");
                    builder.setTitle("Injured person");
                    builder.setView(inflatorBodyMap);
                    builder.setPositiveButton("Next",
                            new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog,
                                                    int which) {
                                                    //next dialog


                                }
                            });
                    builder.setNegativeButton("Back",
                            new DialogInterface.OnClickListener() {
                                @Override
                                public void onClick(DialogInterface dialog,
                                                    int which) {
                                   //previous dialog

                                }
                            });
                    alertBodyMap = builder.create();
                    alertBodyMap.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
                    alertBodyMap.show();
                    return dialog;
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }   
        return dialog
        }

非常感谢您的帮助。 谢谢

1 个答案:

答案 0 :(得分:0)

问题出在webview上的缩放控制功能。

我曾使用波纹管代码进行变焦控制。     。bodyMapWebView.getSettings()setBuiltInZoomControls(真);     。bodyMapWebView.getSettings()setSupportZoom(真);

我禁用了缩放控件的显示,因此我们只能使用波纹管代码进行缩放。

 bodyMapWebView.getSettings().setBuiltInZoomControls(true);              
 bodyMapWebView.getSettings().setDisplayZoomControls(false);

这解决了问题,webview不再弹出键盘。

使用缩放控件+/-我在XML中实现了ZoomControls

 <ZoomControls android:id="@+id/zoomcontrols"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    />

java代码:

        zoomControls = (ZoomControls) inflatorBodyMap.findViewById(R.id.zoomcontrols);
                    /**
                     *
                     */
                    zoomControls.setOnZoomInClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            bodyMapWebView.zoomIn();
                        }
                    });
                    zoomControls.setOnZoomOutClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            bodyMapWebView.zoomOut();
                        }
                    });

希望这有助于其他人。