View.SYSTEM_UI_FLAG_FULLSCREEN не работает должным образом

Я совсем новичок в разработке Android. В моем приложении я использую класс, который является частью всех моих действий. Это позволяет мне определить, что все мое приложение будет в полноэкранном режиме.

Вот код этого класса:

package com.retroverse.bataille_corse;

import android.os.Build;
import android.os.Bundle;
import android.view.View;
import androidx.appcompat.app.AppCompatActivity;

public class FullScreenActivity extends AppCompatActivity {
    @Override
    protected void onResume() {
        super.onResume();
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            this.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
                    | View.SYSTEM_UI_FLAG_FULLSCREEN);
        }
    }
}

Полноэкранный режим работает отлично, за исключением очень специфического случая. Когда я нахожусь в своем приложении, я нажимаю кнопку «домой» на панели навигации, затем, когда я хочу возобновить работу приложения (только так), нажав кнопку «меню приложения» на панели навигации (когда вы видите приложения, которые все еще открыты) и возобновить приложение, панель уведомлений снова появляется, когда она не должна (и только она, с панелью навигации никогда не бывает проблем)... Но она исчезает, когда я меняю активность.

Вот видео, чтобы лучше понять: https://drive.google.com/open?id=1FPoADemhLcPfxnohQdfYOpb6wkxQTx5q

Я также пытался добавить

| View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LOW_PROFILE

Но это ничего не изменило (кроме того, я действительно не знаю, для чего эти 2 представления)...

Мне очень нужна помощь, спасибо!!


person TheBigBadBoy    schedule 18.04.2020    source источник


Ответы (1)


Вы можете удалить строку состояния, перейдя к каждому действию и установив это в своем методе OnCreate:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.your_layout);
}
person Mauricio Castro    schedule 18.04.2020
comment
Привет! Спасибо за ваш более чем информативный ответ, и он творит чудеса. Целью моего класса FullScreenActivity было охватить все функции, необходимые для работы приложения в полноэкранном режиме. Поэтому я попытался добавить ваш код не в каждое действие, а в класс FullScreenActivity (все еще в методе onCreate() и сохранить мой старый код в onResume() ). И это работает отлично! Спасибо еще раз! Но у меня все же есть вопрос: почему мой вариант кода не работает для панели уведомлений (и только в одном случае), а ваш работает? - person TheBigBadBoy; 19.04.2020
comment
Я подозреваю, что это потому, что вы используете setSystemUiVisibility(), а я использую setFlags(), или потому что я использую внутренний метод OnCreate, а вы используете внутри OnResume. PS: если мой ответ работает, не забудьте отметить его как решение. - person Mauricio Castro; 19.04.2020
comment
Спасибо за помощь! Я обратился к документации разработчиков Android, чтобы узнать, есть ли эквивалент View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN и других в WindowManager, но, по-видимому, нет... Однако я заметил, что вместо этого лучше использовать WindowInsetsController#hide(int) с Type#statusBars() (developer.android.com/reference/android/view/). Я прочитал эти статьи, но не знаю, как использовать эти новые ресурсы. Не могли бы вы снова мне помочь? - person TheBigBadBoy; 19.04.2020