Я искал везде, но я в недоумении об этом: попытка активировать режим погружения в проекте; Почти все работает нормально, за исключением того, что фон моей строки состояния всегда остается там, испортил погружение ... Я включил скриншот экрана до и после активации режима погружения и установил «colorPrimaryDark» на полный зеленый цвет для максимальная контрастность: screenshots showing the background of the status bar when nothing should be there кода я использовал и повторно в пустом проекте, чтобы изолировать эту проблему приходит прямо из примеров Дева Google, в моем MainActivity, у меня есть:Статус строки фона остается на экране при входе в режим погружения?
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();
}
}
};
Интересно, если моя проблема может исходить от макеты или файлы стилей, но они являются необработанными от генерации проекта ... Я надеюсь, что кто-то там может указать мне, где я потерпел неудачу! Спасибо заранее!
EDIT: Я обнаружил, что удаление: android:fitsSystemWindows="true"
из файла макета моей деятельности позволяет реальный полноэкранный режим, но тогда мой ActionBar частично скрыт за StatusBar - при показе. Может быть, когда я установил getSupportActionBar().show();
в onSystemUiVisibilityChangeListener
, он будет нарисован слишком рано?
EDIT 2: Как я понимаю, это до сих пор является то, что у меня есть только 2 варианта относительно позиции/размера моего содержания (бар действия в комплекте):
верхней части экрана, которая будет показывать ActionBar частично скрыт statusbar,
или ниже нижнего уровня statusBar, который оставит меня с «отверстием», когда statusBar будет скрыт. -_-
Теперь я ищу решение для анимирования ActionBar вне экрана/на экране внутри мой метод onSystemUiVisibilityChangeListener
, но не могу найти способ захватить его вид, чтобы сделать это, решения размещены там https://stackoverflow.com/a/21125631/6463888 выглядят устаревшими ...
Ну, на самом деле, моя цель - полностью скрыть это, я думал, что цель этого погружного режима состояла в том, чтобы заполнить экран моим содержимым, скрывая статус и панель навигации ... Я не хочу изменить его цвет фона, я просто хочу, чтобы он исчез, как на панели навигации ... – Shiva
Mmmmmmmm да, я понимаю, вы пытались использовать toolbar.hide(), а вместо getSupportActionBar(). hide()? – rik194
afaik, не существует метода hide() для объекта панели инструментов ... Я только что редактировал свой вопрос, чтобы отразить мое текущее положение ... – Shiva