この記事はXamarin Advent Calendar 2014の12/14の記事です
みなさん
Xamarin.Forms使ってますか?
Xamarin.Forms色々便利なんですが
時々気が効かないところがあったり、この機能が足りてないとかします。
そんな時にはXamarin.Forms.Labsを見てみたら
これって機能があったりするかもです(後は少し弄れば使えそうな物があったりと)
せっかくのアドベントカレンダーなので
色んな機能のうち幾つか紹介していこうと思います。
追加コントロール
Calendar Control
カレンダー!
見たままです!カレンダーです。
FormsにはDatePickerがありますが、あれはリールで日付を選ぶ形で
誕生部選ぶにはいいかもしれませんが、予定等で日付を選ぶには不向きです
これだと、jQueryUIのカレンダーのような使い勝手で選べます
なんで本家に無いのか理解に苦しみます
Extended Label/Extended Entry
本家Label/Entryの拡張で、主にフォントオプションが付いたものです。
デザインの都合やユーザーへの案内の都合でフォントを変えたい時に便利かなと思います
HybridWebView
本家WebViewの拡張で、クリック時のコールバックやJavascriptの実行ができます。
見た目はただのWebViewなのですが、これをうまく使うとWebView内部のJSとC#側とでやりとりが出来るようになります
やりとりができて何が嬉しいかというと、Webアプリケーションとの合いの子みたいなアプリもXFormsで作れるようになります。
変更が激しい場所はWebViewで、XFormsが合うところはXFormsでという住み分けが出来るようにもなりますし、
工夫すればWebView内部のタップイベントでXForms側を操作とかもできます
(内部のコードは読んでもらう必要はあると思いますし、多分JS側に何らかのヘルパがあったほうが良い気がします)
コントロールを使うにあたっての注意事項
上記紹介したコントロール以外にもたくさんのコントロールがあります。(Wikiには20個書かれています)
これらは大体はiOS/Android両方で使えますが、いくつかはiOS専用だったり、コントロールは使えるけどこのプロパティーはAndroid専用だったりといった制限があります。
あとは使ってみて、もし「iOSでLabsのコントロールが表示されない」時は
以下の「おまじない」をAppDelegateに書くと表示されることがあります
public override bool FinishedLaunching(UIApplication app, NSDictionary options)
{
Forms.Init();
new CalendarViewRenderer();//おまじない
}
この「おまじない」ですが
どうもLabsのiOSアセンブリ内のRendererがアセンブリごと抜け落ちているみたいです。
自作のコントロールライブラリも、アセンブリが別だと抜け落ちるので現状だと仕方ないのかなと思ってます。
(原因はiOSのAOTコンパイルじゃないかなと勝手に推測してますが、AOTなしのAndroid機を現状持ってないので検証できてません)
その他有用な機能
ざっと面白そうな機能を上げていきます
Services
各種デバイスを使った機能をServiceという形で実装しています
Xamarin Formsではデバイス固有の機能はインターフェイスだけPCLに定義し、実装を各デバイスごとに定義する。という作りです。
このServicesは代表的な機能の実装です。(車輪の再発明いらない)
機能一覧
- 加速度センサー
- カメラ
- バッテリー等のデバイス情報
- 位置情報
- 電話機情報
- サウンド再生
- Text To Speech
MVVM helper類
MVVMや"イケてる"設計をするためのクラス類もあります
- IOC
Xamarin FormsのDependencyServiceはUnityやAutofacといったDIコンテナライブラリと比べたら正直微妙。
ただ、デバイスごとの違いを吸収するためにIOCの機能は必要です。
なので、Xamarin.Forms.Labsは、UnityやAutofacといった既成のDIライブラリをXamarin.Forms.Labs用のIOCとして使うことができます。
- ViewModel, ViewFactory
簡易なMVVMフレームワークです
ViewModelとViewを対応づけることで、ViewModelから次のViewを表示できます。
メモ
いろいろ便利機能があるXamarin Forms Labsですが
まだβバージョンかなーという感じです
うまく使いこなせばすごく便利なのは間違いないのですが
使いこなすにはコードよんだり動かしてみたりする必要があると思います。
活用事例増えていかないかなぁ。