【问题标题】:Switching from full screen to not full screen pop/slide从全屏切换到非全屏弹出/幻灯片
【发布时间】:2011-10-06 00:51:35
【问题描述】:

使用 Android 从非全屏切换到全屏效果很好。但是,从我的全屏活动(全屏视频播放器)返回后,活动会随着状态栏的动画向下滑动而弹出。似乎恢复的活动是从全屏模式动画的,但状态栏不存在,实际活动正在被绘制,就好像它丢失了一样。

我尝试弄乱我的清单文件指定主题/样式。在设置内容视图之前和活动生命周期中的各个其他地方,我已经尝试在 onCreate() 中以编程方式执行此操作:

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

似乎没有办法阻止状态栏向下动画和/或从第一次绘制时没有状态栏的内容视图开始,然后在重新显示时向下调整。

有人对此有任何想法吗?我不确定是否有任何方法可以改变这一点,这只是 Android 的一种行为。

提前致谢。

【问题讨论】:

  • 您是如何解决问题的?能否请您解释一下或提供一些参考?
  • 我使用了 Robert Nekic 下面接受的答案。

标签: android android-fullscreen


【解决方案1】:

我终于找到了处理这种情况的完美方法,而不会弄乱填充。

您只需在非全屏活动中调用此行:

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

这样在呈现全屏活动时布局不会改变,并且您不会看到状态栏弹出。

【讨论】:

  • 配合fitsSystemWindows,完美解决了我的问题
【解决方案2】:

以下是我的解决方案:

在完成全屏Activity之前显示系统状态栏

@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();
        }
    });
}

【讨论】:

  • 这个解决方案对我更有用,因为它不会导致原始活动必须调整其布局填充。
【解决方案3】:

这是消除此问题的完美方法:

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);
}

在您的 Activity 中在 super.onCreate(...) 之前调用它。

【讨论】:

    【解决方案4】:

    您还需要几个标志:FLAG_LAYOUT_IN_SCREEN 和 FLAG_LAYOUT_NO_LIMITS。

    查看http://nubinewsblog.blogspot.com/2009/11/smooth-full-screen-transition.html

    【讨论】:

    • 不幸的是,该解决方案需要 paddingTop 但它可以工作。谢谢。
    【解决方案5】:
    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);
    }
    

    使用它肯定会起作用

    【讨论】:

      【解决方案6】:

      在活动布局的根视图中添加

      android:paddingTop="25dp"

      在活动的onCreatesetContentView()之前添加

       getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN);
       getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
      

      【讨论】:

        【解决方案7】:

        我能够分两步实现这一目标。

        1. 在我想要全屏显示的 Activity 的样式中使用 Theme.AppCompat.Light.NoActionBar

        2. 在 Activity 的 onCreate(Bundle savedInstanceState) 方法中使用以下代码 WindowManager.LayoutParams 属性 = getWindow().getAttributes(); attributes.flags |= WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS; getWindow().setAttributes(属性);

        希望这会有所帮助。快乐编码:)

        【讨论】:

          【解决方案8】:

          我不知道这是否对你有用,但它对我有用。 设置全屏活动:

          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();
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-04-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多