Скрыть клавиатуру в WebView для определенных страниц - PullRequest
0 голосов
/ 17 января 2019

Я создал простое приложение WebView для работы, позволяющее работникам заполнять формы. В 2-х точках им приходится сканировать штрих-коды (в планшет встроен сканер).

Моя проблема в том, что сканер требует фокусировки на вводе, и поэтому появляется всплывающая программная клавиатура, которая не нужна на данный момент и выглядит довольно запутанно.

Я попробовал несколько подходов, найденных в stackoverflow и google, чтобы скрыть клавиатуру без успеха.

Смысл в том, чтобы скрыть клавиатуру только на определенных страницах (где используется сканер) и по-прежнему доступна на других страницах, где это необходимо.

Страница для WebView встроена в HTML и JS. Так что решение 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 голосов
/ 17 января 2019

используйте это

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);
0 голосов
/ 17 января 2019

Вам необходимо понять WebViewClient, пожалуйста, посетите этот URL

1) Прежде всего, вам нужно добавить WebViewClient, и при изменении страницы вы можете получить текущий URL-адрес на shouldOverrideUrlLoading, который проверяет текущий URL-адрес и сравнивает его с вашим URL-адресом и скрывает клавиатуру

например:

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();
    }
}
0 голосов
/ 17 января 2019

В файле manifest.xml напишите код

<activity
        android:name=".activity.MainActivity"
        android:windowSoftInputMode="stateHidden" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...