前提・実現したいこと
自作アプリ実行中、Androidのステータスバーとナビゲーションバーを常に非表示にしたい。
・UnoPlatformを使用していますが、ターゲットはAndroidのみです。
発生している問題と質問
MainActivityのOnLaunch時に、
ApplicationView.GetForCurrentView().TryEnterFullScreenMode();
をすることで、両バーは非表示になり、画面もフルスクリーン表示されます。
問題は、
「ContentDialogを表示すると、ナビゲーションバーが表示される」です。
ダイアログ表示時もバーを非表示にすることは可能でしょうか?
該当のソースコード
MainPage.xaml
XAML
1<Page 2 x:Class="HideBarsTest.MainPage" 3 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 4 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 5 xmlns:local="using:HideBarsTest" 6 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 7 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 8 mc:Ignorable="d" 9 Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 10 11 <Grid> 12 <Button Content="ダイアログ表示" FontSize="25" Margin="10" VerticalAlignment="Top" Height="104" Width="201" Click="ダイアログ表示ボタンクリック"/> 13 </Grid> 14</Page>
MainPage.xaml.cs
C#
1using System; 2using System.Collections.Generic; 3using System.IO; 4using System.Linq; 5using System.Runtime.InteropServices.WindowsRuntime; 6using Windows.Foundation; 7using Windows.Foundation.Collections; 8using Windows.UI.ViewManagement; 9using Windows.UI.Xaml; 10using Windows.UI.Xaml.Controls; 11using Windows.UI.Xaml.Controls.Primitives; 12using Windows.UI.Xaml.Data; 13using Windows.UI.Xaml.Input; 14using Windows.UI.Xaml.Media; 15using Windows.UI.Xaml.Navigation; 16 17// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=402352&clcid=0x409 18 19namespace HideBarsTest 20{ 21 /// <summary> 22 /// An empty page that can be used on its own or navigated to within a Frame. 23 /// </summary> 24 public sealed partial class MainPage : Page 25 { 26 public MainPage() 27 { 28 this.InitializeComponent(); 29 } 30 31 private async void ダイアログ表示ボタンクリック(object sender,RoutedEventArgs e) 32 { 33 var dlg = new ContentDialog(); 34 dlg.Content = "Content Dialog !!"; 35 dlg.PrimaryButtonText = "プライマリボタン"; 36 dlg.IsPrimaryButtonEnabled = true; 37 // 表示直前に入れても、ダイアログ表示中は、バーが表示される 38 ApplicationView.GetForCurrentView().TryEnterFullScreenMode(); 39 await dlg.ShowAsync(); 40 // await後に実行すると、バーは消える 41 ApplicationView.GetForCurrentView().TryEnterFullScreenMode(); 42 } 43 } 44}
MainActivity.cs
C#
1using Android.App; 2using Android.Widget; 3using Android.OS; 4using Android.Content.PM; 5using Android.Views; 6using Android; 7using Android.Content; 8using Windows.UI.ViewManagement; 9 10namespace HideBarsTest.Droid 11{ 12 [Activity( 13 MainLauncher = true, 14 ConfigurationChanges = global::Uno.UI.ActivityHelper.AllConfigChanges, 15 WindowSoftInputMode = SoftInput.AdjustPan | SoftInput.StateHidden 16 )] 17 public class MainActivity : Windows.UI.Xaml.ApplicationActivity 18 { 19 protected override void OnCreate(Bundle bundle) 20 { 21 base.OnCreate(bundle); 22 //フルスクリーンモードにする 23 ApplicationView.GetForCurrentView().TryEnterFullScreenMode(); 24 } 25 26 protected override void OnResume() 27 { 28 base.OnResume(); 29 //フルスクリーンモードにする 30 ApplicationView.GetForCurrentView().TryEnterFullScreenMode(); 31 } 32 } 33}
試したこと
タイマーを使って定期的にフルスクリーン処理を実施しても、ダイアログ表示中はバーが表示されます。
C#
1 private Timer PeriodicTimer; 2 3 protected override void OnCreate(Bundle bundle) 4 { 5 base.OnCreate(bundle); 6 ApplicationView.GetForCurrentView().TryEnterFullScreenMode(); 7 8 PeriodicTimer = new Timer(); 9 PeriodicTimer.AutoReset = true; 10 PeriodicTimer.Interval = 500; 11 PeriodicTimer.Elapsed += PeriodicTimer_Elapsed; 12 PeriodicTimer.Start(); 13 14 } 15 16 private void PeriodicTimer_Elapsed(object sender, ElapsedEventArgs e) 17 { 18 ApplicationView.GetForCurrentView().TryEnterFullScreenMode(); 19 }
補足情報(FW/ツールのバージョンなど)
VisualStudio Enterprise 2019 Ver.16.11.7
Multi-Platform App(Uno platform | Xamarin)
Android 9.0 - API 28
Styles.xmlを以下のように記述し、Main.csにThemeを設定することで、
上部のステータスバーは常に非表示にすることはできています。
XML
1<?xml version="1.0" encoding="utf-8" ?> 2<resources> 3 <style name="Theme.AppCompat.Light.NoTitleBar.FullScreen" parent="Theme.AppCompat.Light"> 4 <!-- This removes the ActionBar --> 5 <item name="windowNoTitle">true</item> 6 <item name="windowActionBar">false</item> 7 <item name="android:windowFullscreen">true</item> 8 <item name="android:windowContentOverlay">@null</item> 9 </style> 10</resources>
C#
1using System; 2using System.Collections.Generic; 3using System.Linq; 4using System.Text; 5using Android.App; 6using Android.Content; 7using Android.OS; 8using Android.Runtime; 9using Android.Views; 10using Android.Widget; 11using Com.Nostra13.Universalimageloader.Core; 12using Windows.UI.Xaml.Media; 13 14namespace HideBarsTest.Droid 15{ 16 [global::Android.App.ApplicationAttribute( 17 Label = "@string/ApplicationName", 18 Icon = "@mipmap/icon", 19 LargeHeap = true, 20 HardwareAccelerated = true, 21 Theme = "@style/Theme.AppCompat.Light.NoTitleBar.FullScreen" 22 )] 23 public class Application : Windows.UI.Xaml.NativeApplication 24 { 25 public Application(IntPtr javaReference, JniHandleOwnership transfer) 26 : base(() => new App(), javaReference, transfer) 27 { 28 ConfigureUniversalImageLoader(); 29 } 30 31 private void ConfigureUniversalImageLoader() 32 { 33 // Create global configuration and initialize ImageLoader with this config 34 ImageLoaderConfiguration config = new ImageLoaderConfiguration 35 .Builder(Context) 36 .Build(); 37 38 ImageLoader.Instance.Init(config); 39 40 ImageSource.DefaultImageLoader = ImageLoader.Instance.LoadImageAsync; 41 } 42 } 43} 44
あなたの回答
tips
プレビュー