Ползунок SeekBar

Последнее обновление: 15.10.2021

Элемент SeekBar выполняет роль ползунка, то есть шкалу делений, на которой мы можем менять текущую отметку.

Среди его атрибутов можно отметить следующие:

  • android:max: устанавливает максимальное значение

  • android:min: устанавливает минимальное значение

  • android:progress: устанавливает текущее значение, которое находится в диапазоне между минимальным и максимальным

Для управления SeekBar определяет ряд методов, из которых выделим следующие:

  • void setProgress(int progress): устанавливает текущее значение ползунка

  • void setMin(int min): устанавливает минимальное значение

  • void setMax(int max): устанавливает максимальное значение

  • void incrementProgressBy(int diff): увеличивает текущее значение на diff

  • int getMax(): возвращает максимальное значение

  • int getMin(): возвращает минимальное значение

  • int getProgress(): возвращает текущее значение

  • void setOnSeekBarChangeListener(SeekBar.OnSeekBarChangeListener l): устанавливает слушателя изменения значения в SeekBar

Определим SeekBar в разметке layout:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="16dp">

    <SeekBar
        android:id="@+id/seekBar"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:progress="20"
        android:max="50"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

Атрибут android:progress задает число 20 в качестве текущего значения ползунка, а атрибут android:max - максимально возможное значение - число 50. В итоге мы получим следующий элемент:

Элемент SeekBar в Android

Теперь используем метод setOnSeekBarChangeListener(), который позволяет установить обработчики событий изменения значения ползунка. Так, определим в файле layout следующий код:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="16dp">

    <TextView android:id="@+id/seekBarValue"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="26sp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <SeekBar
        android:id="@+id/seekBar"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:progress="20"
        android:max="50"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/seekBarValue" />

</androidx.constraintlayout.widget.ConstraintLayout>

Здесь определен элемент TextView, который будет выводить текущее значение ползунка при его изменении.

И изменим код MainActivity:

package com.example.viewapp;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.TimePicker;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        SeekBar seekBar = findViewById(R.id.seekBar);
        TextView textView = findViewById(R.id.seekBarValue);
        seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {

                textView.setText(String.valueOf(progress));
            }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {

            }

            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {

            }
        });
    }
}

В метод setOnSeekBarChangeListener() передается объект SeekBar.OnSeekBarChangeListener, который позволяет установить три метода-обработчика:

  • onProgressChanged: срабатывает при перетаскивании ползунка по шкале. Передаваемый в метод параметр progress позволяет получить новое значение ползунка, которое в данном случае передается в TextView для отображения на экране

  • onStartTrackingTouch: срабатывает при начале перетаскивания ползунка по шкале

  • onStopTrackingTouch: срабатывает при завершении перетаскивания ползунка по шкале

Элемент SeekBar в Android

Также мы можем получить текущее значение ползунка, использовав метод getProgress():

public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {

	textView.setText(String.valueOf(seekBar.getProgress()));
}
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850