前言
这里有一个比较坑的事,系统将状态栏的高度已经设置为0,然后界面上确实已经看不到时间,WiFi 等图标,也无法通过下拉,显示通知栏。但在某些应用的activity上,还是会出现activity的状态栏,这个一开始还以为是activity的标题栏,但到了后面,发现这是状态栏。
应用层更改Activity的窗口风格
而这里的状态栏可以在activity的onCreate方法中通过如下方法隐藏掉:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Window window = getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);//隐藏状态栏
setContentView(R.layout.activity_main);
}
复制代码
这里需要注意的是,所有的窗口属性设置,例如隐藏导航栏,隐藏标题栏,更改状态栏的颜色,都必须在调用如下方法之前:
setContentView(R.layout.activity_main);
复制代码
这是因为,在该执行该方法的时候,就开始去获取窗口的相关属性,然后去进行窗口的绘制,如果,在这之后再去设置属性,会出现报错或者设置无效的情况。
通过系统更改Activity的窗口风格
但此次涉及修改的APP比较多,所以想通过系统来进行实现,将状态栏彻底去掉。
既然在应用层中可以通过方法来解决问题,那么我们只需在源码中搜索setContentView的具体实现,然后再找到合适的位置,在绘制窗口前进行设置即可。
setContentView属于activity的方法,我们查看该方法的实现:
frameworks/base/core/java/android/app/Activity.java
public void setContentView(View view) {
getWindow().setContentView(view);
initWindowDecorActionBar();
}
复制代码
这里通过getWindow方法去获取获取一个实例,然后再调用该实例中的方法。我们先查看getWindow的实现:
frameworks/base/core/java/android/app/Activity.java
public Window getWindow() {
return mWindow;
}
复制代码
这里返回一个全局实例,继续查看该实例的实现,最后发现该实例实在activity的atta