Skip to main content

android kotlin - SeekBar example


Kotlin SeekBar



The SeekBar is a native android SDK widget. The SeekBar widget is an extension of android SDKs ProgressBar widget. SeekBar adds a druggable thumb to the ProgressBar to build itself.




Android app users can touch the SeekBar thumb and drag left or right to set the current progress level. They also can tap on SeekBar to select the specified position value.




The following android kotlin tutorial will demonstrate how we can add a SeekBar widget to our app. And how we can allow users to select a value using the SeekBar component.




The SeekBar.onSeekBarChangeListener is an interface for SeekBar widget. This callback notifies clients when the progress level has been changed. So, we can handle the SeekBar progress change events using this interface. We can do some tasks when the app user changes the SeekBar value.




The SeekBar progress level is in the range of min and max. Android developers can set the SeekBar minimum and maximum values. Android SDK allows developers to set the min and max values both in code and XML layout. The progress range default minimum value is 0 and the maximum is 100.




The SeekBar.onSeekBarChangeListener interface onProgressChanged() notifies that the SeekBar progress level has changed. It allows us to show the current progress value on the app screen. And do the related task.




The onStartTrackingTouch() method notifies that the android app user has started the SeekBar touch gesture. The onStopTrackingTouch() method notifies that the app user finished the SeekBar touch gesture.




This android kotlin tutorial code is written in an android studio IDE. Copy the code into your android studio IDE and run it on an emulator to test how we implemented a SeekBar widget in an android application. We displayed screenshots of the emulator screen, which also help you to understand the code without running it on an android device or emulator.




MainActivity.kt



package com.cfsuman.kotlintutorials

import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import android.widget.*


class MainActivity : AppCompatActivity() {
private lateinit var context:MainActivity

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

// Get the context
context = this;

// Get the widgets reference from XML layout
val seekBar = findViewById<SeekBar>(R.id.seekBar)
val textView = findViewById<TextView>(R.id.textView)

// Set a SeekBar change listener
seekBar.setOnSeekBarChangeListener(
object : SeekBar.OnSeekBarChangeListener {

override fun onProgressChanged(
seekBar: SeekBar, i: Int, b: Boolean) {
// Display the current progress of SeekBar
textView.text = "SeekBar progress : $i"
}

override fun onStartTrackingTouch(seekBar: SeekBar) {
// Do something
showToast("Tracking started")
}

override fun onStopTrackingTouch(seekBar: SeekBar) {
// Do something
showToast("Tracking stopped.")
}
})
}


// Function to show toast message
private fun showToast(message:String){
Toast.makeText(context,message,Toast.LENGTH_SHORT).show()
}
}




activity_main.xml



<?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"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/rootLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="24dp"
android:background="#DCDCDD">

<SeekBar
android:id="@+id/seekBar"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:max="50"
android:layout_marginTop="64dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>

<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/seekBar"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginTop="24dp"
android:text="Drag the Seekbar"
android:textSize="20sp"
android:textStyle="bold"/>

</androidx.constraintlayout.widget.ConstraintLayout>






Popular posts from this blog

Restricting Jetpack Compose TextField to Numeric Input Only

Jetpack Compose has revolutionized Android development with its declarative approach, enabling developers to build modern, responsive UIs more efficiently. Among the many components provided by Compose, TextField is a critical building block for user input. However, ensuring that a TextField accepts only numeric input can pose challenges, especially when considering edge cases like empty fields, invalid characters, or localization nuances. In this blog post, we'll explore how to restrict a Jetpack Compose TextField to numeric input only, discussing both basic and advanced implementations. Why Restricting Input Matters Restricting user input to numeric values is a common requirement in apps dealing with forms, payment entries, age verifications, or any data where only numbers are valid. Properly validating input at the UI level enhances user experience, reduces backend validation overhead, and minimizes errors during data processing. Compose provides the flexibility to implement ...

jetpack compose - TextField remove underline

Compose TextField Remove Underline The TextField is the text input widget of android jetpack compose library. TextField is an equivalent widget of the android view system’s EditText widget. TextField is used to enter and modify text. The following jetpack compose tutorial will demonstrate to us how we can remove (actually hide) the underline from a TextField widget in an android application. We have to apply a simple trick to remove (hide) the underline from the TextField. The TextField constructor’s ‘colors’ argument allows us to set or change colors for TextField’s various components such as text color, cursor color, label color, error color, background color, focused and unfocused indicator color, etc. Jetpack developers can pass a TextFieldDefaults.textFieldColors() function with arguments value for the TextField ‘colors’ argument. There are many arguments for this ‘TextFieldDefaults.textFieldColors()’function such as textColor, disabledTextColor, backgroundColor, cursorC...

jetpack compose - Image clickable

Compose Image Clickable The Image widget allows android developers to display an image object to the app user interface using the jetpack compose library. Android app developers can show image objects to the Image widget from various sources such as painter resources, vector resources, bitmap, etc. Image is a very essential component of the jetpack compose library. Android app developers can change many properties of an Image widget by its modifiers such as size, shape, etc. We also can specify the Image object scaling algorithm, content description, etc. But how can we set a click event to an Image widget in a jetpack compose application? There is no built-in property/parameter/argument to set up an onClick event directly to the Image widget. This android application development tutorial will demonstrate to us how we can add a click event to the Image widget and make it clickable. Click event of a widget allow app users to execute a task such as showing a toast message by cli...