Android全屏模式下的Webview如何在软键盘出现时隐藏通知栏?

3

我使用webview开发了一个小型Android应用程序。为了隐藏所有的Android UI元素,例如通知栏(notificationbar)、状态栏(statusbar)和操作栏(actionbar),我采用了以下方法:

  private void hideSystemUI() {
// Set the IMMERSIVE flag.
// Set the content to appear under the system bars so that the content
// doesn't resize when the system bars hide and show.
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_HIDE_NAVIGATION // hide nav bar
        | View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar
        | View.SYSTEM_UI_FLAG_IMMERSIVE);

当我打开一个HTML表单并在一个输入字段中键入时,软键盘会弹出。 但是此时也会弹出Android的通知栏,这不是我想要的。 (见图片:http://imgur.com/a/cKWg8#0) 如果我通过软键盘上的左上角按钮关闭软键盘,则通知栏仍然保持打开状态,并占据我的HTML页面标题栏的一部分。 如何在打开软键盘时隐藏通知栏?

谢谢!

2个回答

1
这对我很有帮助。在onCreate中调用它:
private void setupFullscreenMode() {
    View decorView = setFullscreen();
    decorView
            .setOnSystemUiVisibilityChangeListener(new OnSystemUiVisibilityChangeListener() {
                @Override
                public void onSystemUiVisibilityChange(int visibility) {
                    setFullscreen();
                }
            });
}

private View setFullscreen() {
    View decorView = getWindow().getDecorView();
    decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
            | View.SYSTEM_UI_FLAG_FULLSCREEN
            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
    return decorView;
}

还要重写onWindowsFocusChanged:

public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    if (hasFocus) {
        setFullscreen();
    }
}

代码对于WebView的输入是有效的,因为软键盘会显示在导航栏上。查看https://dev59.com/-F4d5IYBdhLWcg3wJvsp#28060917获取解决办法的替代方案。 - Mine

0

我曾经遇到过同样的问题,通过以下方法解决了它:

    mWebView.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            hideSystemUI(); // setup fullscreen
        }
    });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接