从全屏切换到不全屏幕弹出/滑动
从不全屏到全屏使用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。
在活动布局的根视图添加
机器人: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);
}
使用它肯定会工作
我能够通过两个步骤实现这一点。
使用
Theme.AppCompat.Light.NoActionBar
在我的风格的活动,我想显示为全屏。 。使用下面的代码在活动的
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();
}
});
}
此解决方案对我更有用,因为它不会导致原始活动必须调整其布局填充。 –
我不知道这是否会为你工作,但它的工作对我。 设置全屏活动:
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);
}
调用此。
这是不幸的解决方案需要paddingTop,但它的工作原理。谢谢。 – mhradek