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);
}
}
}
}
}