Xamarin Rocket – Parte 03: tela cheia, ocultando a barra de status
Dando continuidade à sua série de dicas de Xamarin, neste artigo Thiago Bertuzzi mostra como ocultar a barra de status e tornar uma aplicação tela cheia.

Fala, galera!
Tentando manter a periodicidade semanal, chegamos novamente com uma dica rápida de Xamarin.Forms!
A ideia é ser um artigo bem rápido, e todas as dicas ficarão em um único repositório. Se você perdeu algum, confira os artigos que já saíram:
- Xamarin Rocket – Parte 01: LineBreakMode
- Xamarin Rocket – Parte 02: alterando o espaço das linhas e colunas do Grid
Muitas vezes, para melhorar a interface do nosso aplicativo, podemos fazê-lo em tela cheia. Ou seja, ocultar a barra de status!
Existe uma forma muito fácil de se fazer isso, com Xamarin.Forms. Mais fácil com iOS↳iOS38 conteúdosO X do Xamarin Forms – O guia das funcionalidades nativas – Parte 01: iOSDev (Back & Front) · abr 2019Desenvolvedores: Apple libera terceiro beta do iOS 12.4Dev (Back & Front) · mai 201910 bibliotecas que todo desenvolvedor iOS deve substituir ainda em 2024Dev (Back & Front) · out 2024Ver tudo em Dev (Back & Front) → do que com Android, mas fácil também.
Antes que você fique confuso, vamos a ela!
iOS
De uma forma bem simples, apenas precisamos adicionar o namespace das propriedades de plataforma do iOS xmlns:iOS=”clr-namespace: Xamarin.Forms.PlatformConfiguration.iOSSpecific;assembly=Xamarin.Forms.Core” e em seguida habilitar PrefersStatusBarHidden:
xmlns:iOS="clr-namespace:Xamarin.Forms.PlatformConfiguration.iOSSpecific;assembly=Xamarin.Forms.Core"
iOS:Page.PrefersStatusBarHidden="True"Se quiser aprender mais sobre funcionalidades nativas, clique aqui.
Rodando:

Android
No Android precisamos criar uma funcionalidade nativa – nada muito difícil:
Primeiro criaremos a interface no projeto compartilhado:
using System;
namespace XamarinRocket.Helpers
{
public interface IAndroidHideStatusBar
{
void HideStatusBar(bool hide);
}
}Em seguida criaremos no Android o AndroidHideStatusBar:
using System;
using Xamarin.Forms;
using Plugin.CurrentActivity;
using XamarinRocket.Droid.Helpers;
using XamarinRocket.Helpers;
using Android.Views;
using Android.App;
[assembly: Dependency(typeof(AndroidHideStatusBar))]
namespace XamarinRocket.Droid.Helpers
{
public class AndroidHideStatusBar : IAndroidHideStatusBar
{
WindowManagerFlags _originalFlags;
public void HideStatusBar(bool hide)
{
var activity = (Activity)Forms.Context;
var attrs = activity.Window.Attributes;
if (hide)
{
_originalFlags = attrs.Flags;
attrs.Flags |= Android.Views.WindowManagerFlags.Fullscreen;
activity.Window.Attributes = attrs;
}
else
{
attrs.Flags = _originalFlags;
activity.Window.Attributes = attrs;
}
}
}
}Agora chamaremos o Dependency service na tela principal:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;
using XamarinRocket.Helpers;
using XamarinRocket.ViewModel;
namespace XamarinRocket
{
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
this.BindingContext = new MainViewModel();
if (Xamarin.Forms.Device.RuntimePlatform == Xamarin.Forms.Device.Android)
{
Xamarin.Forms.DependencyService.Get<IAndroidHideStatusBar>().HideStatusBar(true);
}
}
}
}Rodando:

Legal, não?
- Mas Bertuzzi, o Forms.Context está obsoleto. Posso ficar usando?
Certo, então vamos implementar o nosso com o novo Application.Context:
Criaremos nosso próprio MainApplication:
using System;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
namespace XamarinRocket.Droid.Helpers
{
[Application]
public partial class MainApplication : Application, Application.IActivityLifecycleCallbacks
{
internal static Context ActivityContext { get; private set; }
public MainApplication(IntPtr handle, JniHandleOwnership transfer) : base(handle, transfer) { }
public override void OnCreate()
{
base.OnCreate();
RegisterActivityLifecycleCallbacks(this);
}
public override void OnTerminate()
{
base.OnTerminate();
UnregisterActivityLifecycleCallbacks(this);
}
public void OnActivityCreated(Activity activity, Bundle savedInstanceState)
{
ActivityContext = activity;
}
public void OnActivityResumed(Activity activity)
{
ActivityContext = activity;
}
public void OnActivityStarted(Activity activity)
{
ActivityContext = activity;
}
public void OnActivityDestroyed(Activity activity) { }
public void OnActivityPaused(Activity activity) { }
public void OnActivitySaveInstanceState(Activity activity, Bundle outState) { }
public void OnActivityStopped(Activity activity) { }
}
}E colocaremos no Lugar do FormContext:
using System;
using Xamarin.Forms;
using Plugin.CurrentActivity;
using XamarinRocket.Droid.Helpers;
using XamarinRocket.Helpers;
using Android.Views;
using Android.App;
[assembly: Dependency(typeof(AndroidHideStatusBar))]
namespace XamarinRocket.Droid.Helpers
{
public class AndroidHideStatusBar : IAndroidHideStatusBar
{
WindowManagerFlags _originalFlags;
public void HideStatusBar(bool hide)
{
var activity = (Activity)MainApplication.ActivityContext; ;
var attrs = activity.Window.Attributes;
if (hide)
{
_originalFlags = attrs.Flags;
attrs.Flags |= Android.Views.WindowManagerFlags.Fullscreen;
activity.Window.Attributes = attrs;
}
else
{
attrs.Flags = _originalFlags;
activity.Window.Attributes = attrs;
}
}
}
}Duas dicas pelo preço de uma, hein?
É uma dica bem simples, mas que ajuda muito.
Caso queiram baixar o código utilizado no exemplo, cliquem aqui.
Quer ver outros artigos sobre Xamarin? Acesse este link.
Espero ter ajudado.
Aquele abraço!







