从全屏切换到不全屏幕弹出/滑动

问题描述:

从不全屏到全屏使用Android工作正常。但是,从我的全屏活动(全屏幕视频播放器)返回后,活动会随着状态栏的动画向下滑动而向下滑动。看起来,恢复活动是从全屏模式动画的,但状态栏不在那里,实际活动正在被绘制,就好像它缺失一样。从全屏切换到不全屏幕弹出/滑动

我试图弄乱我的清单文件指定主题/样式。我曾尝试这样做编程中的onCreate()的内容画面设置前和活动的生命周期不同的其它地方:

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

看来,有没有办法保持状态栏的动画下降和/或者从没有状态栏的第一张图的内容视图开始,然后在重新显示时进行调整。

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

在此先感谢。

您需要更多的标志:FLAG_LAYOUT_IN_SCREEN和FLAG_LAYOUT_NO_LIMITS。

结账http://nubinewsblog.blogspot.com/2009/11/smooth-full-screen-transition.html

+0

这是不幸的解决方案需要paddingTop,但它的工作原理。谢谢。 – mhradek

在活动布局的根视图添加

机器人:paddingTop = “25dp”

在活动的onCreate,所述setContentView()之前添加

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

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. 使用Theme.AppCompat.Light.NoActionBar在我的风格的活动,我想显示为全屏。 。

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

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

以下是我的解决方案:

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

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

下面是解决这个问题的最佳方式:super.onCreate(...)你的活动中之前

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

调用此。