[.NET MAUI] Flyoutメニュー追加
.NET MAUIに標準で準備されたページ遷移のうち、Flyoutメニュー(三本線のハンバーガーボタンをタップしすると横からメニューがスライド表示)を作ってみる。
まずはAppShell.xaml
を修正する。
Shell.BackgroundColor
Shell.TitleColor
はメニューを選択した際の画面上部ナビゲーションバーの色である。Flyoutメニュー部分はプラットフォームのテーマに依存し、色変更はできないようだ。
<?xml version="1.0" encoding="UTF-8" ?>
<Shell
x:Class="RentaProto.AppShell"
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:RentaProto"
- Shell.FlyoutBehavior="Disabled"
+ Shell.FlyoutBehavior="Flyout"
Title="レンタプロト">
- <ShellContent
- Title="Home"
- ContentTemplate="{DataTemplate local:MainPage}"
- Route="MainPage" />
+ <FlyoutItem Title="レンタカー予約" Icon="car.png">
+ <ShellContent
+ Title="レンタカー予約"
+ ContentTemplate="{DataTemplate local:MainPage}"
+ Shell.BackgroundColor="Black" Shell.TitleColor="White"
+ Route="MainPage" />
+ </FlyoutItem>
+ <FlyoutItem Title="ユーザー設定" Icon="user.png">
+ <ShellContent
+ Title="ユーザー設定"
+ ContentTemplate="{DataTemplate local:UserPage}"
+ Shell.BackgroundColor="Black" Shell.TitleColor="White"
+ Route="UserPage" />
+ </FlyoutItem>
</Shell>
各ページのナビゲーションバーも表示する。
- Shell.NavBarIsVisible="False">
+ Shell.NavBarIsVisible="True">
アイコン
メニューにアイコンとして表示するcar.png
user.png
は Google Fonts から拝借する。
Flyoutメニュー部分の背景や文字は色指定ができないようだが、プラットフォームのテーマ(Lightモード、Darkモード)に応じてアイコンを変更したい場合は{AppThemeBinding}
を使う。ただし仕組み上、アプリ起動時点のテーマによってアイコンが決定されるため、アプリ起動後にテーマを変更してもアイコンは変わらない。
<FlyoutItem Title="レンタカー予約"
- Icon="car.png">
+ Icon="{AppThemeBinding Light=car.png, Dark=car_fff.png}">
car_fff.png
user_fff.png
の作り方は、さきほどのGoogle FontsサイトよりSVGをダウンロードして、SVGに<path style="fill:#FFF;"
を追加して、SVG to PNG でPNGファイルとして保存する。
ここまでで、iOSで見た目はこうなった。
プロジェクトファイルの編集
アプリのタイトルを変える。
<!-- Display name -->
- <ApplicationTitle>RentaProto</ApplicationTitle>
+ <ApplicationTitle>レンタプロト</ApplicationTitle>
アプリのアイコンを変える。アイコンはForegroundFile
によりSVGファイルで指定し、アイコンのベースの色をColor
で、SVGの塗り色をTintColor
で指定する。
<!-- App Icon -->
- <MauiIcon Include="Resources\AppIcon\appicon.svg" ForegroundFile="Resources\AppIcon\appiconfg.svg" Color="#512BD4" />
+ <MauiIcon Include="Resources\AppIcon\appicon.svg" ForegroundFile="Resources\AppIcon\caricon.svg" TintColor="#165FA6" Color="White" />
スプラッシュ画面(アプリ起動時に表示される紫色の.NETロゴ画面)を変える。.NETロゴはそのまま、Color
でどぎつい紫をマットな青に変更する。
<!-- Splash Screen -->
- <MauiSplashScreen Include="Resources\Splash\splash.svg" Color="#512BD4" BaseSize="128,128" />
+ <MauiSplashScreen Include="Resources\Splash\splash.svg" Color="#165FA6" BaseSize="128,128" />