只调用两个方法即可搞定透明状态栏
说明:
- 以下三个方法都是静态方法, 放到你项目的工具类中调用即可;
/**
* 透明状态栏(界面会展示在状态栏下面, 此时状态栏挡住了我们的界面上的一些东西, 需要处理)
* 需要在 setContentView()方法之前调用, 否则程序会崩溃
*/
public static void alphaTask(Activity context) {
context.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = context.getWindow();
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS
| WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(Color.TRANSPARENT);
window.setNavigationBarColor(Color.TRANSPARENT);
}
}
/**
* 获取系统状态栏的高度(目的是让被系统状态栏挡住的内容移动到状态栏下面)
*/
public static int getStatusBarHight(Context context) {
int statusBarHeight = -1;
int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0) {
statusBarHeight = context.getResources().getDimensionPixelSize(resourceId);
}
return statusBarHeight;
}
/**
* 设置ActionBar距离顶部的距离为系统状态栏的高度距离(此时, 状态栏已经不会挡住我们的界面了)
*/
public static void initActionBar(Context context, View actionBar) {
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) actionBar.getLayoutParams();
params.setMargins(0, getStatusBarHight(context), 0, 0);
}
单个activity调用即可, 如果要在BaseActivity中封装该功能, 在BaseActivity的onCreate方法中的setContentView方法之前调用alphaTask方法, 然后在BaseActivity中封装抽象方法, 将actionBar的view对象传入, 强制子类实现, 即可;