Xamarin.Forms 4.0を試してみた
この記事は、mediba Advent Calendar 2018の10日目です。
コミュニケーションデザイン本部 創造部 アプリ開発グループの松島です。Xamarinが大好きです。
今回は、Xamarin.Forms 4.0のプレビュー版がリリースされたので、早速試してみました。
試したバージョンは4.0.0.8055-pre1です。
新機能
以下の3つの機能が追加されました。
現状では、これらの機能を使うためには、AppDelegate
やMainActivity
で以下のように設定する必要があります。
global::Xamarin.Forms.Forms.SetFlags("Shell_Experimental", "Visual_Experimental", "CollectionView_Experimental");
Shell
Shellは、MasterDetailPage
のような所謂ハンバーガーメニューを作成する機能です。MasterDetailPage
とどこが違うのかというと、MasterDetailPage
でページを切り替えるには、前のページを破棄して、切り替えるたびに新しくページを作成することになるのですが、Shell
は、最初にページを作ってしまい、あとは表示を切り替えるだけになっています。その点は、TabbedPage
に似ています。
Shellは、以下のように使います。
<Shell xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:XamarinForms4App"
x:Class="XamarinForms4App.MainPage">
<Shell.Resources>
...
</Shell.Resources>
<ShellItem Title="Visual">
<ShellSection Title="Material">
<ShellContent>
<local:MaterialPage/>
</ShellContent>
</ShellSection>
<ShellSection Title="Normal">
<ShellContent>
<local:NormalPage/>
</ShellContent>
</ShellSection>
</ShellItem>
<ShellItem Title="CollectionView">
<ShellContent>
<local:CollectionViewPage/>
</ShellContent>
</ShellItem>
</Shell>
ShellItem
で、メニューを追加して、ShellContent
に表示するページを含めます。ShellSection
を使えば、タブで切り替えることができるページにすることができます。
あと、iOSでメニューアイコンを表示するには、3bar.png
という名前で画像を含めないといけないようです。
Visual
今までは、共通に書いていても、iOSとAndroidで見た目が結構異なり、デザインに苦労することがありました。4.0からは、マテリアルデザインで見た目も同じようにすることが可能になりました。
Visual
プロパティをMaterial
にすることで、マテリアルデザインにすることができます。
<ContentPage ...
Visual="Material">
...
</ContentPage>
CollectionView
グリッド表示をするには、AiForms.CollectionViewというライブラリを使っていたのですが、ようやく公式にも登場しました。
カラム数が3つのグリッドを作るには以下のようにします。
<CollectionView ItemsSource="{Binding Items}" >
<CollectionView.ItemsLayout>
<GridItemsLayout Orientation="Vertical"
Span="3" />
</CollectionView.ItemsLayout>
<CollectionView.ItemTemplate>
<DataTemplate>
<StackLayout HeightRequest="100">
<Label Text="{Binding Title}"/>
<Label Text="{Binding Detail}" FontSize="Small" />
</StackLayout>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
現状では、クリックイベントもスペースの設定もできないようなので、まだまだこれからといった感じです。
GitHub
作ったものはここに置いておきます。
おわりに
最近、Xamarin.Formsの進化が目覚ましいです。まだまだのところもありますが、大分使いやすいものになってきました。今後も要チェックですね。
