Элемент 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. В итоге мы получим следующий элемент:
Теперь используем метод 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
: срабатывает при завершении перетаскивания ползунка по шкале
Также мы можем получить текущее значение ползунка, использовав метод getProgress():
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { textView.setText(String.valueOf(seekBar.getProgress())); }