スライダー

Slider コンポーザブルを使用すると、ユーザーは特定の値の範囲から選択できるようになります。スライダーを使用して、ユーザーが次の操作を行うことができます。

  • 音量や明るさなど、値の範囲を使用した設定を調整します。
  • 価格帯を設定する場合と同様に、グラフのデータをフィルタできます。
  • ユーザー入力(レビューでの評価の設定など)。

スライダーには、トラック、つまみ、値ラベル、目盛りが含まれています。

  • トラック: トラックは、スライダーが指定できる値の範囲を表す水平バーです。
  • つまみ: つまみはスライダー上のドラッグ可能なコントロール要素で、ユーザーはトラックで定義された範囲内の特定の値を選択できます。
  • 目盛り: 目盛りは、スライダーのトラック上に表示されるオプションの視覚的なマーカーまたはインジケーターです。
つまみ、トラック、目盛りが付いたスライダー。
図 1. スライダーの実装。

基本的な実装

API 定義の全文については、Slider リファレンスをご覧ください。Slider コンポーザブルの主なパラメータは次のとおりです。

  • value: スライダーの現在の値。
  • onValueChange: 値が変更されるたびに呼び出されるラムダ。
  • enabled: ユーザーがスライダーを操作できるかどうかを示すブール値。

次の例は、単純なスライダーです。これにより、ユーザーは 0.0 から 1.0 までの値を選択できます。ユーザーはこの範囲内の任意の値を選択できるため、スライダーは連続しています。

@Preview
@Composable
fun SliderMinimalExample() {
    var sliderPosition by remember { mutableFloatStateOf(0f) }
    Column {
        Slider(
            value = sliderPosition,
            onValueChange = { sliderPosition = it }
        )
        Text(text = sliderPosition.toString())
    }
}

これを実装すると次のようになります。

トラック上で約 4 分の 3 が選択された値が表示されたスライダー コンポーネント。
図 2. スライダーの基本的な実装。

高度な実装

より複雑なスライダーを実装する場合は、次のパラメータも使用できます。

  • colors: スライダーの色を制御できる SliderColors のインスタンス。
  • valueRange: スライダーが指定できる値の範囲。
  • steps: つまみをスナップするスライダーのノッチの数。

次のスニペットでは、0.0 から 50.0 の範囲の 3 つのステップからなるスライダーを実装しています。つまみは各ステップにスナップするため、このスライダーは非連続です。

@Preview
@Composable
fun SliderAdvancedExample() {
    var sliderPosition by remember { mutableFloatStateOf(0f) }
    Column {
        Slider(
            value = sliderPosition,
            onValueChange = { sliderPosition = it },
            colors = SliderDefaults.colors(
                thumbColor = MaterialTheme.colorScheme.secondary,
                activeTrackColor = MaterialTheme.colorScheme.secondary,
                inactiveTrackColor = MaterialTheme.colorScheme.secondaryContainer,
            ),
            steps = 3,
            valueRange = 0f..50f
        )
        Text(text = sliderPosition.toString())
    }
}

実装は次のようになります。

ここに代替テキストを入力
図 3. ステップ数と設定値の範囲が表示されたスライダー

範囲スライダー

専用の RangeSlider コンポーザブルを使用することもできます。これにより、ユーザーは 2 つの値を選択できます。これは、ユーザーが最低価格と最高価格を選択する必要がある場合に便利です。

次の例は、連続範囲スライダーの比較的わかりやすい例です。

@Preview
@Composable
fun RangeSliderExample() {
    var sliderPosition by remember { mutableStateOf(0f..100f) }
    Column {
        RangeSlider(
            value = sliderPosition,
            steps = 5,
            onValueChange = { range -> sliderPosition = range },
            valueRange = 0f..100f,
            onValueChangeFinished = {
                // launch some business logic update with the state you hold
                // viewModel.updateSelectedSliderValue(sliderPosition)
            },
        )
        Text(text = sliderPosition.toString())
    }
}

2 つの値が選択された範囲スライダー コンポーネント。ラベルに選択範囲の上限と下限が表示されます。
図 4. 範囲スライダーの実装。

参考情報