在WebView中隐藏特定页面的键盘

时间:2019-01-17 09:53:48

标签: java android html webview

我为工作创建了一个简单的WebView应用程序,以使工作人员可以填写表格。 他们必须在2点扫描条形码(平板电脑具有内置扫描仪)。

我的问题是,扫描仪需要专注于输入,因此软键盘会弹出,这是目前不需要的,并且看上去有些混乱。

我尝试了在stackoverflow和google上找到的几种方法来隐藏键盘,但没有成功。

重点是仅在特定页面(使用扫描仪的页面)上隐藏键盘,并且在需要的其他页面上仍然可用。

WebView的页面内置于HTMLJS中。因此,JS解决方案可能会起作用,但我更喜欢真正的Java解决方案。

我当前使用的代码用于检查url并尝试隐藏键盘(不成功)。如您所见,我已经尝试了几种解决方案,但没有一个可行。

@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {

    super.onPageStarted(view, url, favicon);

    Log.d("WebView", "your current url when webpage loading.." + url);

    if(url.equals("https://********/index.php?show=kontrolle&step=4")) {
        this.activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
        Log.d("WebView", "should hide now!");
        //view = activity.findViewById(android.R.id.content);
        //InputMethodManager imm =(InputMethodManager) this.activity.getSystemService(Context.INPUT_METHOD_SERVICE);
        //imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
        //this.activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
        //this.activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

    }

}

3 个答案:

答案 0 :(得分:0)

在manifest.xml文件中,编写以下代码

<activity
        android:name=".activity.MainActivity"
        android:windowSoftInputMode="stateHidden" />

答案 1 :(得分:0)

使用此

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
//hide keboard:
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);
//and for show keyboard
imm.showSoftInput(myEditText, InputMethodManager.SHOW_IMPLICIT);

答案 2 :(得分:0)

您需要了解WebViewClient,请访问this url

1)首先,您需要添加WebViewClient,并且在更改页面时,您可以在shouldOverrideUrlLoading上获取当前网址,该网址会检查当前网址并将其与您的网址进行比较并隐藏键盘

例如:

WebView webview = new WebView(context);
webview.setWebViewClient(new WebViewClient()
        {
            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                super.onPageStarted(view, url, favicon);

            Log.d("WebView", "your current url when webpage loading.." + url);
        }

        @Override
        public void onPageFinished(WebView view, String url) {
            Log.d("WebView", "your current url when webpage loading.. finish" + url);
            super.onPageFinished(view, url);
        }

        @Override
        public void onLoadResource(WebView view, String url) {
            // TODO Auto-generated method stub
            super.onLoadResource(view, url);
        }
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            System.out.println("when you click on any interlink on webview that time you got url :-" + url);
//compare here your URL and hide keyboard
            return super.shouldOverrideUrlLoading(view, url);
        }
    });

隐藏软键盘的代码

  

两种方法可以隐藏软键盘,您可以将其保留在Common-Utils类中

public static void hideSoftKeyboard(Activity activity) {
    if (activity != null && activity.getCurrentFocus() != null) {
        InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService(INPUT_METHOD_SERVICE);
        inputMethodManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);

    }

}

如果有EditText可用的第二种方法

public static void forceHideKeyboard(Activity activity, EditText editText) {
    try {

        if (editText == null) return;

        if (activity.getCurrentFocus() == null
                || !(activity.getCurrentFocus() instanceof EditText)) {
            editText.requestFocus();
        }

        InputMethodManager imm = (InputMethodManager) activity
                .getSystemService(INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
        activity.getWindow().setSoftInputMode(
                WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);


    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}