Как скрыть панель навигации после закрытия клавиатуры? - PullRequest
0 голосов
/ 11 июня 2018

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

Как это исправить?Я искал проблему в интернете, и многие новички вроде меня сталкиваются с такими же проблемами.Было бы полезно, если бы вы предоставили мне решение.

вот мой код.(mainactivity.java)

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

  // find the WebView by name in the main.xml of step 2
    browser=(WebView)findViewById(R.id.webview);

    // Enable javascript
    browser.getSettings().setJavaScriptEnabled(true);

    // Set WebView client
    browser.setWebChromeClient(new WebChromeClient());

    browser.setWebViewClient(new WebViewClient() {

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            // open in Webview
            if (url.contains("example.com") ){
                // Can be clever about it like so where myshost is defined in your strings file
                // if (Uri.parse(url).getHost().equals(getString(R.string.myhost)))
                return false;
            }
            // open rest of URLS in default browser
            Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
            startActivity(intent);
            return true;
        }
    });
    // Load the webpage

    browser.loadUrl("http://example.com/");


}
//back button
public void onBackPressed() {
    if (browser.canGoBack()) {
        browser.goBack();
    } else {
        super.onBackPressed();
    }

}

// nav bar and status bar hide..... should figure out glitch with keyboard
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    if (hasFocus) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            getWindow().getDecorView().setSystemUiVisibility(
                    View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                            | View.SYSTEM_UI_FLAG_LOW_PROFILE
                            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // hide nav bar
                            | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar
                            | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
            );
        }
    }
}

}

1 Ответ

0 голосов
/ 11 июня 2018

Используйте эту библиотеку KeyboardVisibilityEvent , в которой уже реализована логика прослушивания для отображения / скрытия клавиатуры:

KeyboardVisibilityEvent.setEventListener(
        getActivity(),
        new KeyboardVisibilityEventListener() {
            @Override
            public void onVisibilityChanged(boolean isOpen) {
                // some code depending on keyboard visiblity status
            }
        });
...