私はどこでも検索してきましたが、それについて途方に暮れています。プロジェクトで没入モードをアクティブにしようとしています。ステータスバーの背景が常にそこにとどまり、没入感を台無しにすることを除いて、ほとんどすべてが正常に機能します...没入モードをアクティブにする前後の画面のスクリーンショットを含め、最大のコントラストのために「colorPrimaryDark」を完全な緑に設定しました: 何も表示されない場合のステータス バーの背景を示すスクリーンショット この問題を特定するために使用し、空のプロジェクトに再挿入したコードは、私の MainActivity にある Google 開発者の例から直接取得したものです。
private final String TAG = "DEBUG::" + this.getClass().getSimpleName();
private final int INITIAL_HIDE_DELAY = 1500;
private View decorView;
private Toolbar toolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
//setting needed decorView for fullscreen behavior
decorView = getWindow().getDecorView();
decorView.setOnSystemUiVisibilityChangeListener(onSystemUiVisibilityChangeListener);
}
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
Log.i(TAG, "onWindowFocusChanged::hasFocus = " + hasFocus);
if (hasFocus) {// When the window gains focus, hide the system UI.
delayedHide(INITIAL_HIDE_DELAY);
} else {// When the window loses focus, cancel any pending hide action.
mHideHandler.removeMessages(0);
}
}
private void hideSystemUI() {
Log.i(TAG, "hideSystemUI");
int uiOptions = View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
uiOptions |= View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION;
uiOptions |= View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
uiOptions |= View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
uiOptions |= View.SYSTEM_UI_FLAG_FULLSCREEN;
uiOptions |= View.SYSTEM_UI_FLAG_LOW_PROFILE;
uiOptions |= View.SYSTEM_UI_FLAG_IMMERSIVE;
decorView.setSystemUiVisibility(uiOptions);
}
private final Handler mHideHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
hideSystemUI();
}
};
private void delayedHide(int delayMillis) {
Log.i(TAG, "delayedHide");
mHideHandler.removeMessages(0);
mHideHandler.sendEmptyMessageDelayed(0, delayMillis);
}
private View.OnSystemUiVisibilityChangeListener onSystemUiVisibilityChangeListener =
new View.OnSystemUiVisibilityChangeListener() {
@Override
public void onSystemUiVisibilityChange(int visibility) {
if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) {
// The system bars are visible
getSupportActionBar().show();
delayedHide(INITIAL_HIDE_DELAY);
} else {
// The system bars are NOT visible
getSupportActionBar().hide();
}
}
};
私の問題はレイアウト ファイルまたはスタイル ファイルに起因するのだろうかと思いますが、それらはプロジェクト生成によるものです...誰かが私が失敗した場所を指摘してくれることを願っています! 前もって感謝します!
編集:アクティビティのレイアウト ファイルから : を削除android:fitsSystemWindows="true"
すると、実際のフルスクリーン モードが可能になることがわかりましたが、表示時に ActionBar の一部が StatusBar の後ろに隠れています。に設定するとgetSupportActionBar().show();
、onSystemUiVisibilityChangeListener
描画が早すぎるのでしょうか?
編集2:これまでのところ、コンテンツの位置/サイズ(アクションバーを含む)に関して2つの選択肢しかないことを理解している:
画面の上部、ステータスバーによって部分的に隠されているアクションバーを表示する
か、ステータスバーの下これにより、statusBar が非表示のときに「穴」が残ります-_-メソッド
内で自分で ActionBar を画面外/画面上でアニメーション化するソリューションを探していますが、onSystemUiVisibilityChangeListener
方法が見つかりませんそのビューを取得するには、そこに投稿されたソリューションhttps://stackoverflow.com/a/21125631/6463888が古くなっているようです...