Внешний вид строки состояния - это фон и цвета текста.Оба свойства имеют свои ограничения на разных платформах, однако мы можем манипулировать обоими с помощью решения, описанного ниже.
Наша цель проста, мы хотим иметь возможность переключать внешний вид строки состояния между LightTheme и DarkTheme во время выполнения:
Начиная с Android Lollipop (21) можно устанавливать пользовательский статусцвет фона панели, просто определив его в style.xml с помощью клавиши colorPrimaryDark или программно, так как в Android M (23) можно установить предопределенную цветную тему текста строки состояния на светлый или темный.
Код Android:
public class StatusBarStyleManager : IStatusBarStyleManager
{
public void SetDarkTheme()
{
if (Build.VERSION.SdkInt >= BuildVersionCodes.M)
{
Device.BeginInvokeOnMainThread(() =>
{
var currentWindow = GetCurrentWindow();
currentWindow.DecorView.SystemUiVisibility = 0;
currentWindow.SetStatusBarColor(Android.Graphics.Color.DarkCyan);
});
}
}
public void SetLightTheme()
{
if (Build.VERSION.SdkInt >= BuildVersionCodes.M)
{
Device.BeginInvokeOnMainThread(() =>
{
var currentWindow = GetCurrentWindow();
currentWindow.DecorView.SystemUiVisibility = (StatusBarVisibility)SystemUiFlags.LightStatusBar;
currentWindow.SetStatusBarColor(Android.Graphics.Color.LightGreen);
});
}
}
Window GetCurrentWindow()
{
var window = CrossCurrentActivity.Current.Activity.Window;
// clear FLAG_TRANSLUCENT_STATUS flag:
window.ClearFlags(WindowManagerFlags.TranslucentStatus);
// add FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS flag to the window
window.AddFlags(WindowManagerFlags.DrawsSystemBarBackgrounds);
return window;
}
}
Я использую плагин Current Activity от James Montemagno, чтобы получить ссылку на текущую активность.
Код iOS:
В iOS цвет фона строки состояния по умолчанию соответствует цвету панели навигации.Другими словами, нам не нужно явно устанавливать цвет фона строки состояния, если мы хотим, чтобы он совпадал с цветом фона панели навигации.Начиная с iOS 7 можно установить предопределенную цветную тему текста в строке состояния на светлый или темный.Однако нам придется манипулировать Info.plist.Так как поведение строки состояния по умолчанию определяется контроллерами представления, мы должны отключить это:
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
Далее мы можем определить цветовую тему текста по умолчанию:
<key>UIStatusBarStyle</key>
<string>UIStatusBarStyleDefault</string>
public class StatusBarStyleManager : IStatusBarStyleManager
{
public void SetDarkTheme()
{
Device.BeginInvokeOnMainThread(() =>
{
UIApplication.SharedApplication.SetStatusBarStyle(UIStatusBarStyle.LightContent, false);
GetCurrentViewController().SetNeedsStatusBarAppearanceUpdate();
});
}
public void SetLightTheme()
{
Device.BeginInvokeOnMainThread(() =>
{
UIApplication.SharedApplication.SetStatusBarStyle(UIStatusBarStyle.Default, false);
GetCurrentViewController().SetNeedsStatusBarAppearanceUpdate();
});
}
UIViewController GetCurrentViewController()
{
var window = UIApplication.SharedApplication.KeyWindow;
var vc = window.RootViewController;
while (vc.PresentedViewController != null)
vc = vc.PresentedViewController;
return vc;
}
}
Goodluck
Возврат в случае запросов.