Xamarin.FormsのSliderについてちょっと気になった点。
Sliderは、以下のようにつまみがあり、Doubleの数値のある区間から1つの値が設定可能なGUI部品。
Android版
こちらのバージョン、バーが白だったので、ちょっと見づらい。
UWP版
動作確認をしていたところ、以下のソースの場合、スライダーをいくら動かしても、小数点以下2桁目0のままで、小数点以下2桁目の値を調整することはできなかった。
Slider slider = new Slider
{
Minimum = 0,
Maximum = 100,
VerticalOptions = LayoutOptions.CenterAndExpand,
Margin = new Thickness(10, 0)
};
slider.ValueChanged += OnSliderValueChanged;
void OnSliderValueChanged(object sender, ValueChangedEventArgs e)
{
label.Text = String.Format("Slider value is {0:F2}", e.NewValue);
}
一応、Minimum, Maximumに0~100を指定した場合、ステップ値(StepperでいうとIncrement相当)は0.1となった。そのため、OnSliderValueChangedで受け取った値を小数点以下2桁まで表示しようとしても、2桁目は0のまま。0~10を指定した場合は0.01となった。
結果としてSliderがとりうる値はMinimumからMaximumを1000分割したステップでの値になっていることが分かった。
ちなみにSliderでは最大・最少の設定は可能だがステップ値の設定するプロパティはない。
この分割数の疑問について調べてみたところ、以下のような記載が見つかった。
これによるとOSにより動作が違うと書かれており、Android版ではSeekBarを使いその分割数属性を1000に設定しているためだとのこと。UWP版はもう少し細かい記述があったのだが、実際に動かしてみるとAndroid版と同じ1000分割での動作だった。
iOS版については確かめられなかったが、AndroidとUWPの動作を合わせていることを見る限りiOSも同じ1000分割なのだろう。
一応上記リンクの先には、Step数を設定可能なStepSliderというカスタム実装についてのPDFのリンクもあったし、Googleで検索してもStep値を設定可能なSliderはないかという質問がそれなりにあったので、疑問に思った人もいたのだろう。
ただ、Minimum, Maximumの範囲が大きくステップ値が小さい値を選択させる場合、SliderではなくEntryか、入力後上下細かい数値調整が必要ならEntry+Stepperで対応したほうがいいのかもしれない。
コメント