我想出了一个解决方法,检查每个内部的导航栏的状态,尝试隐藏它,并再次检查(再次).

这是一些代码,确保在软键盘关闭后的2秒内导航栏被隐藏.

private final Runnable checkSystemUiRunnable = new Runnable() {

@Override

public void run() {

checkHideSystemUI();

}

};

private void checkHideSystemUI() {

// Check if system UI is shown and hide it by post a delayed handler

if (isSystemUiShown) {

hideSystemUI();

handler.postDelayed(checkSystemUiRunnable, SYSTEM_UI_HIDE_DELAY);

}

}

private void hideSystemUI() {

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_HIDE_NAVIGATION // hide nav bar

| View.SYSTEM_UI_FLAG_FULLSCREEN // hide status bar

| View.SYSTEM_UI_FLAG_IMMERSIVE);

}

// In onCreate()

decorView.setOnSystemUiVisibilityChangeListener(

new View.OnSystemUiVisibilityChangeListener() {

@Override

public void onSystemUiVisibilityChange(int visibility) {

if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) {

handler.postDelayed(checkSystemUiRunnable, SYSTEM_UI_HIDE_DELAY);

isSystemUiShown = true;

} else {

isSystemUiShown = false;

}

}

});

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐