7

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

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

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

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

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

提前致谢。

4

8 回答 8

2

您还需要一些标志:FLAG_LAYOUT_IN_SCREEN 和 FLAG_LAYOUT_NO_LIMITS。

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

于 2011-11-08T17:05:10.313 回答
2
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);
}

使用它肯定会起作用

于 2014-08-21T06:13:02.100 回答
2

以下是我的解决方案:

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

@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();
        }
    });
}
于 2016-11-25T03:49:39.903 回答
2

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

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

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

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

于 2018-09-09T18:09:15.040 回答
1

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

android:paddingTop="25dp"

onCreate活动中,setContentView()添加前

 getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN);
 getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
于 2014-07-07T08:35:10.903 回答
1

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

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(...)在您的活动中调用它。

于 2017-08-16T06:51:42.533 回答
0

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

  1. 在我的样式中使用Theme.AppCompat.Light.NoActionBar我想全屏显示的活动。

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

希望这可以帮助。快乐编码:)

于 2016-11-14T14:58:55.487 回答
0

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

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();
于 2017-03-26T01:11:04.973 回答