没入モードで実行する 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() メソッド内でこれら 2 つのメソッドを次々と呼び出しています :-
@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 です。
私の質問 :-
スワイプするたびにナビゲーションバーを非表示にする方法は? また、ホームを長押ししたときに「今すぐ話す」が起動しないようにする方法は?