1.实现透明状态栏
安卓4.4以上才可以实现透明状态栏,具体代码如下:
Window window = activity.getWindow(); window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); 注意:实现透明状态栏会默认把应用的布局延伸到状态栏位置,如果不想布局延伸到状态栏显示,则可以通过View.setFitsSystemWindows为true来实现 2.更改状态栏颜色 2.1 安卓5.0以上更改状态栏颜色很简单,只要如下代码:Window window = activity.getWindow(); window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); window.setStatusBarColor(statusBarColor); 2.2 安卓4.4实现状态栏的方法较为复杂,前面已经说了当设置状态栏颜色为透明时会默认把应用布局延伸到状态栏位置显示,这时候可以获取window的dectorView,自定义一个高度为状态栏高度的布局,添加到dectorView,因为此时状态栏为透明显示,所以通过修改该布局的颜色可以达到改变状态栏的颜色的效果.Window window = activity.getWindow(); //设置状态栏为透明 window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); ViewGroup decorView = (ViewGroup) window.getDecorView(); View statusBarView = new View(activity);; decorView.addView(decorView, ViewGroup.LayoutParams.MATCH_PARENT,getStatusBarHeight());} //设置背景色 statusBarView.setBackgroundColor(statusBarColor);3.将布局延伸到状态栏显示(沉侵式状态栏)获取状态栏高度的方法: public static int getStatusBarHeight() { Resources res = Resources.getSystem(); int id = Resources.getSystem().getIdentifier("status_bar_height", "dimen", "android"); if (id > 0) { return res.getDimensionPixelSize(id); } return (int) (res.getDisplayMetrics().density * 25f + 0.5f); }
3.1 安卓5.0以上也是已经有封装好的api,具体代码如下:注意:要让布局延伸到状态栏View.setFitsSystemWindows必须为false;Window window = activity.getWindow();decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LAYOUT_STABLE);ViewGroup decorView = (ViewGroup) window.getDecorView(); //设置为全屏显示而且延伸到状态栏且状态栏可见
3.2 安卓4.4要将布局延伸到状态栏显示仅需要设置状态栏为透明,然后View.setFitsSystemWindows必须为false,代码如下:Window window = activity.getWindow();
//设置状态栏为透明
window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
View.setFitsSystemWindows(false);注意:3.1和3.2在实现沉侵式状态栏时,如果把布局延伸到状态栏后怕应用头布局被状态栏控件遮挡,可以设置头布局的marginTop值为状态栏的高度.4.我的问题 在2.2,3.1,3.2的实现方法中,如果界面有键盘和输入框的,会导致要输入内容时键盘不会把输入框顶起,而是覆盖掉了输入框的问题,有没有什么好的解决方案,求指教!!