kamulog

xamarin.formsのネタなど

SettingsView ver.1.1.1 新機能の紹介

ちびちびと development ブランチで大改造してたんですが、ここら辺で一区切りしようとpreとしてリリースすることにしました。 色々と変更がありますが、主な変更をご紹介します。

github.com

CustomCell

SettingsViewのCellのコンテンツ部分をFormsViewで定義できるもので、ViewCellのようなものです。 ViewCellと異なるところは以下の通りです。

  • タッチした時の反応(色の変化)がある
  • 他のSettingsViewのCellと同じような余白がある
    • 無しにもできる
  • Command / LongCommand がある
  • アイコンを設定できる
  • 右端に矢印アイコンを表示できる

これにより、SettingsViewに定義されてない機能のCellを自由に定義することが可能です。 ただNativeCellに比べるとパフォーマンスは落ちると思います。 CustomCellRendererは protected virtual ばっかりにしたので、それを乗っ取れば好きなNativeCellを作れるかも知れません笑

詳細はReadMeを参照してください。

Section Header と Footer には文字列しか指定できませんでしたが、それぞれFormsViewを指定できるようになりました。 これにより、表現の幅がかなり広がったかと思います。

こちらも詳細は ReadMeを参照してください。

TemplateStartIndex

テンプレートの適用を開始するindexを指定できます。 これを使用すると例えばこういう定義の場合

<sv:Section ItemsSource="{Binding CountList}" TemplateStartIndex="1">
    <sv:Section.ItemTemplate>
        <DataTemplate>
            <sv:NumberPickerCell Min="1" Max="999" Number="{Binding}"  />
        </DataTemplate>
    </sv:Section.ItemTemplate>            
    <sv:LabelCell Title="カウント設定" />
</sv:Section>

XAMLの子要素のベタ書きとDataTemplateを混在させることができ、最初にLabelCellが表示され、TemplateStartIndexで指定された1番目からDataTemplateが適用され、ItemsSourceの要素の数だけNumberPickerCellが表示されます。

f:id:kamusoft:20200118215945p:plain

部分的にDataTemplateを適用できるので結構便利かと思います。

Section またぎの D&D

そもそも並べ替え機能とか誰も使ってないかもしれませんが笑、その並べ替え機能は今まで同一セクション内に限定されていましたが、UseDragSortがTrueになっているSectionの間で自由にD&Dで動かせるようになりました。

Cell / Section の部分更新

今まではセル1個の変更だろうが、問答無用でUITableView.ReloadData()やAdapter.NotifyDataSetChanged()を呼び出してたので、動的変更が非常に低パフォーマンスでしたが、それぞれInsertRowsなどの個別更新通知を呼び出すように変更して、そのあたりのパフォーマンスは改善されたと思います。 これに伴い、InsertやDeleteの際にセルがアニメーションするようになりました。 SectionのVisibleの切り替えの際も、個別更新するようにしたので、よりスムーズになりました。

まとめ

セルの個別変更通知の実装や、TemplateStartIndexの導入でかなり既存の部分を書き換えたので、しばらくはPreReleaseでの公開にしたいと思います。プロダクトに導入するのはおすすめできません笑

何かあればIssueで報告していただけると幸いです。