在Android的网络视图上停用键盘

时间:2016-03-11 11:21:29

标签: android webview android-softkeyboard

我有一个Webview,我加载了一个网址。此网址有一个表单,但我不想在用户点击填写表单时显示Android的键盘。我试过这个:

在活动中:

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

在清单中:

 android:windowSoftInputMode="stateHidden"

在布局中:

android:descendantFocusability="blocksDescendants"

和webview的属性:

android:focusable="false" 
android:focusableInTouchMode="true"

没有什么对我有用,有解决方案吗?感谢

我的代码是:

mWebview  = new WebView(this);


            mWebview.setWebViewClient(new WebViewClient() {

                @Override
                public boolean shouldOverrideUrlLoading(WebView view, String url) {


                    if (url.startsWith("tel:")) {
                        //initiateCall(url);
                        return true;
                    }
                    if (url.startsWith("mailto:")) {
                        //sendEmail(url.substring(7));
                        return true;
                    }


                    return false;
                }


            });




            mWebview.getSettings().setJavaScriptEnabled(true);

            mWebview .loadUrl("http://www.myweb.com");
            setContentView(mWebview );

3 个答案:

答案 0 :(得分:0)

我不确定,但你可以这样做:

mWebView.setOnTouchListener(new View.OnTouchListener() {
        public boolean onTouch(View v, MotionEvent event) {
            hideSoftKeyboard(View v);
            return false;  
        }     
}); 

隐藏部分:

public void hideSoftKeyboard(View v) {
    Activity activity = (Activity) v.getContext();
    InputMethodManager inputMethodManager = (InputMethodManager)  activity.getSystemService(Activity.INPUT_METHOD_SERVICE);
    inputMethodManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);
}

看,如果有效..

答案 1 :(得分:0)

您可以尝试添加焦点侦听器并在焦点更改时隐藏键盘

mWebview.setOnFocusChangeListener(new OnFocusChangeListener() {

    @Override
    public void onFocusChange(View v, boolean hasFocus) {

        //hide keyboard
        InputMethodManager inputManager = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
        if(null != inputManager && null != getCurrentFocus()) {
            inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
        }

    }
});

答案 2 :(得分:0)

这有点棘手,但通常编程就是这样;) 您使用javascript制作的主要想法是只读取网页上的所有可编辑元素。在我的例子中,我为inputs制作了它,但通常你可以选择你想要的一切。

应该有效:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        WebView webView  = new WebView(this);
        setContentView(webView);

        webView.getSettings().setJavaScriptEnabled(true);

        final String js = "javascript: var allInputs = document.getElementsByTagName('input'); for (var i = 0, len = allInputs.length; i < len; ++i) { allInputs[i].readOnly = true;}";
        webView.setWebViewClient(new WebViewClient(){
            @Override
            public void onPageFinished(WebView view, String url) {
                if (Build.VERSION.SDK_INT >= 19) {
                    view.evaluateJavascript(js, new ValueCallback<String>() {
                        @Override
                        public void onReceiveValue(String s) { }
                    });
                } else {
                    view.loadUrl(js);
                }
            }
        });
        webView.loadUrl("https://www.google.de/");
    }
}