using Android.App; using Android.Content; using Android.OS; using Android.Views; using AndroidApplication = Android.App.Application; namespace System.Application { /// /// 状态栏工具类 /// public static class StatusBarUtil { static int GetStatusBarHeight(Context context) { var resources = context.Resources; if (resources == null) throw new NullReferenceException($"Context.Resources is null, Context: {context}"); int resourceId = resources.GetIdentifier("status_bar_height", "dimen", "android"); return resources.GetDimensionPixelSize(resourceId); } /// /// 获取状态栏高度 /// public static int StatusBarHeight => GetStatusBarHeight(AndroidApplication.Context); #region 亮色状态栏 WindowLightStatusBar const int SYSTEM_UI_FLAG_LIGHT_STATUS_BAR = (int)SystemUiFlags.LightStatusBar; /// /// 设置状态栏是否为亮色风格(图标背景为黑灰色) /// 仅 6.0 (M) 以上生效 /// /// /// public static void SetWindowLightStatusBar(Activity activity, bool isLightStatusBar) { if (Build.VERSION.SdkInt >= BuildVersionCodes.M) { var decorView = activity.Window?.DecorView; if (decorView != null) { var oldValue = (int)decorView.SystemUiVisibility; var value = oldValue; if (isLightStatusBar) { value |= SYSTEM_UI_FLAG_LIGHT_STATUS_BAR; } else { value &= ~SYSTEM_UI_FLAG_LIGHT_STATUS_BAR; } if (value != oldValue) { decorView.SystemUiVisibility = (StatusBarVisibility)value; } } } } #endregion /// /// 初始化用于沉浸式状态栏的 View /// /// public static void InitImmersiveStatusBar(View fakeStatusBar) { int status_bar_height = StatusBarHeight; var layoutParams = fakeStatusBar.LayoutParameters; if (layoutParams != null) { layoutParams.Height = status_bar_height; fakeStatusBar.LayoutParameters = layoutParams; } } static void ClearFitsSystemWindows(View view) { view.SetFitsSystemWindows(false); view.SetPadding(0, 0, 0, 0); } /// /// 初始化用于沉浸式状态栏的 Activity /// /// public static void InitImmersiveStatusBar(Activity activity) { if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop) { var window = activity.Window; if (window != null) { var view = ((ViewGroup)window.DecorView).GetChildAt(0); if (view == null) return; ClearFitsSystemWindows(view); view = view.FindViewById(Android.Resource.Id.Content); if (view == null) return; var viewParent = view.Parent; if (viewParent == null) return; var viewGroup = (ViewGroup)viewParent; if (viewGroup == null) return; ClearFitsSystemWindows(viewGroup); view = ((ViewGroup)view).GetChildAt(0); if (view == null) return; ClearFitsSystemWindows(view); } } } } }