我正在编写一个应该在沉浸式模式下运行的 android 应用程序。我想隐藏导航栏,为此我编写了一个方法:-
public void hideSystemUI()
{
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
);
}
我还编写了一种方法来检测导航栏的可见性,然后在可见时将其隐藏。
private void systemUIListener()
{
//listens and check if app is in immersive mode or not
View decorView = getWindow().getDecorView();
decorView.setOnSystemUiVisibilityChangeListener
(new View.OnSystemUiVisibilityChangeListener() {
@Override
public void onSystemUiVisibilityChange(int visibility) {
// Note that system bars will only be "visible" if none of the
// LOW_PROFILE, HIDE_NAVIGATION, or FULLSCREEN flags are set.
if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) {
// TODO: The system bars are visible. Make any desired
// adjustments to your UI, such as showing the action bar or
// other navigational controls
hideSystemUI();
}
}
});
}
我在我的 onCreate() 方法中一个接一个地调用这两种方法:-
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
hideSystemUI();
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
setContentView(R.layout.activity_main);
// hide system ui
systemUIListener();
}
我的问题是,该应用程序可以完美运行一段时间,即导航栏出现并立即隐藏,但几次滑动后,导航栏不会隐藏。它将是可见的。
我还注意到,当长按主页按钮时,也会启动“speak-now google”。
我正在使用 android 5.0.1 版本,我的设备是 lenovo tab 2。
我的问题 :-
每次滑动时如何隐藏我的导航栏?以及如何防止长按主页时启动“立即发言”?