A SeekBar
is an extension of ProgressBar
that adds a draggable thumb. Basically SeekBar
has a thumb that you can slide to choose a value between 0 and some maximum that you set. A typical usage of Seekbar
is your device brightness control and volume control.
Now let’s we discuss important attributes that helps us to configure a SeekBar
in xml file (layout).
android:max
property is basically used to set a maximum integer value for selection using SeekBar
.android:progress property
is basically used to set a integer value for SeekBar
progress.android:background
is used to set the background.thumb
is used in seekbar to draw a thumb on a seekbar.Clients of the SeekBar
can attach a SeekBar.OnSeekBarChangeListener
to be notified of the user's actions.
Basically SeekBar.OnSeekBarChangeListener
is a public static interface that is used to listen the SeekBar
events. The SeekBar.OnSeekBarChangeListener
interface allows us to override the below methods.
onProgressChanged()
– Used to notify that the progress level has changed.onStartTrackingTouch()
– Used to notify that the user has started a touch gesture.onStopTrackingTouch()
– Used to notify that the user has finished a touch gesture.public class MainActivity extends AppCompatActivity { private TextView tv; private SeekBar seekBar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); seekBar = findViewById(R.id.seekBar); tv = findViewById(R.id.textView); seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {} @Override public void onStartTrackingTouch(SeekBar seekBar) {} @Override public void onStopTrackingTouch(SeekBar seekBar) { tv.setText(String.valueOf(seekBar.getProgress())); } }); } }
Below is a layout for MainActivity
<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="8dp" android:layout_marginRight="8dp" android:layout_marginTop="8dp" android:textSize="24sp" android:text="0" tools:text="90" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" /> <SeekBar android:id="@+id/seekBar" android:layout_width="368dp" android:layout_height="wrap_content" android:layout_marginTop="8dp" android:max="100" android:progress="3" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toBottomOf="@+id/textView"/> </android.support.constraint.ConstraintLayout>
Result
Decorating progressDrawable and thumb properties
<SeekBar android:id="@+id/seekBar" android:layout_width="368dp" android:layout_height="wrap_content" android:layout_marginTop="8dp" android:max="100" android:progress="3" android:splitTrack="false" android:progressDrawable="@drawable/seekbar_drawable_progress" android:thumb="@drawable/seekbar_drawable_thumb" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toBottomOf="@+id/textView" />
Below is content of drawable/seekbar_drawable_progress.xml file
<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@android:id/background"> <shape android:shape="rectangle"> <stroke android:color="#dadbdc" android:width="2dp" /> <solid android:color="#b7b7b7"/> <corners android:radius="10dp"/> </shape> </item> <item android:id="@android:id/progress"> <clip android:clipOrientation="horizontal" android:gravity="left"> <shape android:shape="rectangle"> <stroke android:color="#C24C47" android:width="2dp" /> <solid android:color="#D83731"/> <corners android:radius="10dp"/> </shape> </clip> </item> </layer-list>
Below is content of drawable/seekbar_drawable_thumb.xml file
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape android:shape="oval"> <solid android:color="#585eff"/> <stroke android:color="#99c8f7" android:width="3dp"/> <size android:height="30dp" android:width="30dp"/> </shape> </item> </selector>
Result
Useful links