本文共 1719 字,大约阅读时间需要 5 分钟。
只调用两个方法即可搞定透明状态栏
说明:/** * 透明状态栏(界面会展示在状态栏下面, 此时状态栏挡住了我们的界面上的一些东西, 需要处理) * 需要在 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对象传入, 强制子类实现, 即可;
转载地址:http://ocmwo.baihongyu.com/