全屏设置
方式一 setContentView前设置FLAG_FULLSCREEN
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//无title
requestWindowFeature(Window.FEATURE_NO_TITLE);
//全屏
getWindow().setFlags(WindowManager.LayoutParams. FLAG_FULLSCREEN ,
WindowManager.LayoutParams. FLAG_FULLSCREEN);
setContentView(R.layout.main);
}
方式二 修改界面主题为android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
用方式一跳转到对应全屏界面时,会看到短暂的状态栏,然后才全屏,而方式二这种方法是不会有这种情况。
方式三 动态修改全屏或非全屏(推荐)
假如程序运行过程中,执行了某个操作需要全屏,然后还需要退出全屏,方法如下
动态全屏
WindowManager.LayoutParams attrs = getWindow().getAttributes();
attrs.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN;
getWindow().setAttributes(attrs);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
// 添加FLAG_LAYOUT_NO_LIMITS标志,window会自动重新布局,呈现全屏的状态
动态退出全屏
WindowManager.LayoutParams attrs = getWindow().getAttributes();
attrs.flags &= (~WindowManager.LayoutParams.FLAG_FULLSCREEN);
getWindow().setAttributes(attrs);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
全屏界面切换到非全屏界面
上述操作有两种:
- 全屏界面启动非全屏页面
- 非全屏启动全屏然后按返回键
但是在页面切换到非全屏界面时,会出现先显示页面内容,然后由于状态栏的出现,整个界面下移一个状态栏高度的问题。
解决办法
@Override
protected void onStart() {
super.onStart();
// 1. onStart时调用添加方法
smoothSwitchScreen();
}
private void smoothSwitchScreen() {
ViewGroup rootView = ((ViewGroup) this.findViewById(android.R.id.content));
int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
int statusBarHeight = getResources().getDimensionPixelSize(resourceId);
// 给整个ContentView设置上padding为状态栏高度
rootView.setPadding(0, statusBarHeight, 0, 0);
// 该参数会让界面无状态栏限制,填满整个屏幕,从而全屏,由于上padding为状态栏高度,故整体整体显示和默认相同,从而界面不会出现下移
getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
}
``