Переключение с полноэкранного на не полноэкранный режим pop / slide - PullRequest
6 голосов
/ 06 октября 2011

Переход с не полного экрана на полный экран с Android работает нормально.Тем не менее, после возвращения из моего полноэкранного режима (полноэкранного видеопроигрывателя) активность всплывает вниз, когда строка состояния оживляет вниз.Кажется, что возобновление активности анимировано в полноэкранном режиме, но с отсутствующей строкой состояния реальная активность отображается так, как если бы ее не было.стили.Я попытался сделать это программно в onCreate () до того, как будет настроено представление контента, и в других местах жизненного цикла действия:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);

Кажется, что нет способа предотвратить анимацию строки состояния внизи / или из представления содержимого с первого чертежа без строки состояния, а затем корректировка вниз при повторном отображении.

У кого-нибудь есть какие-либо мысли по этому поводу?Я не уверен, есть ли способ изменить это, и это просто поведение Android.

Заранее спасибо.

Ответы [ 8 ]

3 голосов
/ 08 ноября 2011

Вам нужно еще несколько флагов: FLAG_LAYOUT_IN_SCREEN и FLAG_LAYOUT_NO_LIMITS.

Выезд http://nubinewsblog.blogspot.com/2009/11/smooth-full-screen-transition.html.

2 голосов
/ 21 августа 2014
private void toggleFullscreen(boolean fullscreen)
{
    WindowManager.LayoutParams attrs = getWindow().getAttributes();
    if (fullscreen)
    {
        attrs.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN;
    }
    else
    {
        attrs.flags &= ~WindowManager.LayoutParams.FLAG_FULLSCREEN;
    }
    getWindow().setAttributes(attrs);
}

Используйте это, оно обязательно сработает

1 голос
/ 09 сентября 2018

Наконец-то я нашел идеальный способ справиться с этим делом, не вмешиваясь в отступы.

Вам просто нужно позвонить по этой строке в не полноэкранном действии:

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE);

Таким образом, макет не будет изменен при представлении полноэкранного режима, и вы не увидите всплывающую строку состояния.

1 голос
/ 16 августа 2017

Вот идеальный способ устранить эту проблему:

private void setFullscreen(boolean fullscreen) {
    WindowManager.LayoutParams attrs = getWindow().getAttributes();
    if (fullscreen) {
        attrs.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN;
        attrs.flags |= WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;
        attrs.flags |= WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS;
    }
    else {
        attrs.flags &= ~WindowManager.LayoutParams.FLAG_FULLSCREEN;
        attrs.flags &= ~WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;
        attrs.flags &= ~WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS;
    }
    getWindow().setAttributes(attrs);
}

Позвоните до super.onCreate(...) внутри вашей активности.

1 голос
/ 25 ноября 2016

Вот мое решение:

Показать строку состояния системы перед завершением полного экрана. Действие

@Override
public void onBackPressed() {
  getWindow().setFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN, WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);

    mUIHandler.post(new Runnable() {
        @Override
        public void run() {
            MyFullScreenActivity.super.onBackPressed();
        }
    });
}
1 голос
/ 07 июля 2014

В корневом представлении макета активности добавьте

андроида: paddingTop = "25dp"

В onCreate действия, перед setContentView() добавить

 getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN);
 getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
0 голосов
/ 26 марта 2017

Я не знаю, сработает ли это для вас, но сработало для меня. Установить полноэкранное действие:

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.my_screen);

отключить полный экран:

WindowManager.LayoutParams attrs = getWindow().getAttributes();
attrs.flags |= WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS;
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
getWindow().setAttributes(attrs);
startActivity(new Intent(getBaseContext(),NewActivity.class));
finish();
0 голосов
/ 14 ноября 2016

Мне удалось достичь этого в два этапа.

  1. Используйте Theme.AppCompat.Light.NoActionBar в моих стилях для Деятельности, которую я хочу показать в полноэкранном режиме.

  2. Используйте приведенный ниже код в методе действия onCreate(Bundle savedInstanceState) WindowManager.LayoutParams attribute = getWindow (). GetAttributes (); attribute.flags | = WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS; GetWindow () SetAttributes (атрибуты);.

Надеюсь, это поможет. Удачного кодирования:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...