Xamarin 日本語情報

Xamarin(ザマリン) の代理店だったエクセルソフト田淵のブログです。主に Xamarin に関するエントリーをアップしていきます。(なるべく正しい有益な情報を掲載していきたいと考えていますが、このブログのエントリーは所属組織の公式見解ではありませんのでご注意ください)

Xamarin.Forms 1.4系 の各アップデート内容について

こんにちは。エクセルソフトの田淵です。

2015/3/9 に NuGet Gallery | Xamarin.Forms 1.4.0.6341 がリリースされましたので、アップデート内容を纏めます。

1.3 系のアップデート内容は Xamarin.Forms 1.3 系の各アップデート内容について に纏めてありますので、併せてご参照ください。

Xamarin.Forms 1.4.0

Xamarin.Forms 1.4.0 Released - Xamarin Forums

NuGet Gallery | Xamarin.Forms 1.4.0.6341

変更点

Important Notes

これは機能リリースです。パッチバージョンとは異なり、マイナーバージョンには新しい API が含まれます。

API

ScrollView

ScrollView の現在のスクロールオフセットを検出することが可能になりました。これらは読み取り専用のバインド可能プロパティです。

public double ScrollX { get; } 
public double ScrollY { get; } 

ScrollView にスクロールさせる方法もあります。

public Task ScrollToAsync (double x, double y, bool animated); 
public Task ScrollToAsync (Element element, bool animated); 

ScrollToAsync に渡された ElementScrollView の子孫要素でなければなりませんが、直接の子である必要はありません。

また、スクロールを監視するためにバインディングを使用したくない人のために、ScrollXScrollY が更新された際に発火する Scrolled イベントがあります。

public event EventHandler<ScrolledEventArgs> Scrolled; 

public class ScrolledEventArgs : EventArgs 
{ 
    public double ScrollX { get; } = 0; 
    public double ScrollY { get; } = 0; 
}

ScrollView はもはやフロントエンドとレンダラーの間で通信するために、任意の内部APIを使用していません。ScrollView に明示的に実装された IScrollViewController は、自身や他のイベントをトリガーするために使用できます。

ListView

Separator の機能拡張

ListView でセパレーターを有効/無効にできるようになりました。これは、バインド可能な SeparatorVisibility プロパティを介して設定することができます。

public SeparatorVisibility SeparatorVisibility { get; set; } = SeparatorVisibility.Default; 

public enum SeparatorVisibility { 
    Default = 0, 
    None = 1, 
} 

現時点ではすべてのプラットフォームがその UX の一部としてセパレーターを持っているわけではないので Always なオプションはありません。(すみません。訳違うかも) しかしそれは Windows プラットフォーム用のパラダイムになり、将来的にこれを追加することを検討しています。

ListView のセパレーターに Color を適用できます。

public Color SeparatorColor { get; set; } = Color.Default; 

デフォルト値は Color.Default で、何もしなければ 1.3.0 実装から変わらずに機能します。 RGBA値がサポートされています。この関数は SeparatorVisibilityNONE に設定されていると何もしません。ListView をロードした後に Android 上でこれらのプロパティのいずれかを設定すると、大規模なパフォーマンスペナルティが生じますのでご注意ください。

Header/Footer

ListView のヘッダーとフッターの両方も成長しました。これらは、簡単な使用方法から、より複雑な MVVM スタイルの使用方法までのすべてで使用可能な一連のプロパティを介して管理されています。

public object Header { get; set; } = null; 
public DataTemplate HeaderTemplate { get; set; } = null; 
public object Footer { get; set; } = null; 
public DataTemplate FooterTemplate { get; set; } = null; 

ヘッダーまたはフッターは View に直接設定できるので、テンプレートのプロパティで Null のままな場合がありますのでに注意が必要です。これはヘッダー/フッターを直接レンダラーによって消費されるようになります。これらのプロパティのすべてがバインド可能です。

Pull To Refresh

PullToRefresh が現在のすべてのターゲットプラットフォーム上の ListView で有効になりました。PullToRefreshを有効にするにはあなたのアプリケーションに単純に IsPullToRefreshEnabled を true に設定し、正しいイベントに応答することを確認してください。これは、将来的に完全な API を追加した独立した View が追加されるまでの「簡易的な」API であるのことに注意してください。

public event EventHandler Refreshing; 

public bool IsPullToRefreshEnabled { get; set; } = false; 
public bool IsRefreshing { get; set; } = false; 
public ICommand RefreshCommand { get; set; } = null; 

public void BeginRefresh (); 
public void EndRefresh (); 

ユーザーが PullToRefresh をトリガーするとコマンドが Refreshed エベントを放出します。IsRefreshing が true にセットされます。ICommand.CanExecute プロパティが尊重されます。ユーザーは refresh 状態を終了させるために EndRefreshIsRefreshing を false にアサインする必要があります。

これらの機能のすべてのパラメーターは明示的に ListView に実装された IListViewController インタフェースを介して公開されています。これは、これらの機能を Custom Renderer で変更したい方を支援します。

プラットフォームの idiom が生じないように PullToRefresh の Windows Phone の実装はカスタムな実装です。将来的に Windows プラットフォームで、デフォルトで PullToRefresh のメソッドを追加することを決定した場合には、ポートしていきたいと考えています。

田淵注釈: PullToRefresh については P3PPP さん[Xamarin.Forms 1.4.0-pre1] ListViewの新機能 "Pull To Refresh" - Qiita が詳しいです。

Forms.Application

Application クラスは、モーダルナビゲーションに対応するための 4 つの新しいイベントを公開します。

public event EventHandler<ModalPushedEventArgs> ModalPushed; 
public event EventHandler<ModalPoppedEventArgs> ModalPopped; 
public event EventHandler<ModalPushingEventArgs> ModalPushing; 
public event EventHandler<ModalPoppingEventArgs> ModalPopping; 

ModalPoppingEventArgs はそれが true にセットされるとポップイベントをキャンセルし、アプリケーションがバックグラウンドに入る(オペレーティングシステムには unhandled back イベントが通知されます) Cancel プロパティを含みます。

この機能を実装するために、すべての Pre-Application のメソッドは、ルートページ Parentとして設定されているデフォルトの Application を作成するために更新されました。いくつかのエッジケースで問題を引き起こすことがあれば、バグレポートを提出してください。可能な場合は、新しい LoadApplication の初期化方法論も提案してください。

Application は現在、Properties 辞書を手動で IsolatedFileStore に強制的に保存する方法があります。This is to allow users to save their properties when it makes sense for them rather than risk them not getting serialized out due to a crash/being killed by the OS.(すみません。訳不明…)

public Task SavePropertiesAsync () 

OpenGLRenderer

Android では OpenGLRenderer は一貫性を保つために OpenGLViewRenderer に名前が変更されました。

その他の機能

です。

Xamarin 気になった方は

是非 ダウンロード(直接) / ダウンロード(弊社経由) して触ってみてください。 学習用リソースJXUG リンクページ に参考資料を纏めてますので併せてどうぞ。

以上です。

エクセルソフト | ダウンロード | 学習用リソース | JXUG リンクページ | ブログ購読