How to dynamically create a round corner Spinner in Kotlin

In this android kotlin source code example, we are going to dynamically create a round corner Spinner in Kotlin.

You can copy and adopt this source code example to your Kotlin android project without reinventing the wheel.

Below is a step by step source code to dynamically create a round corner Spinner in Kotlin.

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/constraintLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="24dp"
    tools:context=".spinner.SpinnerActivity5">

</androidx.constraintlayout.widget.ConstraintLayout>

MainActivity.kt

import android.content.Context
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.view.ViewGroup
import android.widget.ArrayAdapter
import android.widget.Spinner
import android.widget.TextView
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.constraintlayout.widget.ConstraintSet
import androidx.core.content.ContextCompat
import com.bluapp.kotlinview.R

class SpinnerActivity5 : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_spinner5)
        val constraintLayout = findViewById(R.id.constraintLayout) as ConstraintLayout
        val conParam = ConstraintLayout.LayoutParams(
            ViewGroup.LayoutParams.MATCH_PARENT,
            ViewGroup.LayoutParams.WRAP_CONTENT
        )
        conParam.topToTop = ConstraintSet.PARENT_ID
        conParam.bottomToBottom = ConstraintSet.PARENT_ID
        conParam.startToStart = ConstraintSet.PARENT_ID
        conParam.endToEnd = ConstraintSet.PARENT_ID
        val spinner = Spinner(this)
        spinner.background= ContextCompat.getDrawable(this@SpinnerActivity5, R.drawable.rounded_spinner)
        val userNames = arrayOf("Henry", "Mark", "Jack", "Smith", "Clark", "Kelvin", "Denzel")
        val customArrayAdapter = CustomArrayAdapter<String>(this@SpinnerActivity5, userNames)
        spinner.adapter = customArrayAdapter
        constraintLayout.addView(spinner, conParam)
    }

    internal class CustomArrayAdapter<T>(internal val ctx: Context, objects: Array<T>) : ArrayAdapter<T>(ctx, android.R.layout.simple_spinner_item, objects) {
        override
        fun getDropDownView(position: Int, convertView: View?, parent: ViewGroup): View {
            val view = super.getView(position, convertView, parent)
            val text = view.findViewById(android.R.id.text1) as TextView
            return view
        }
    }
}

drawable/rounded_spinner.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <layer-list>
            <item>
                <shape>
                    <stroke android:width="2dp" android:color="@color/colorAccent" />
                    <corners
                        android:radius="4dp"/>
                    <padding android:bottom="4dp" android:left="4dp" android:right="4dp" android:top="4dp" />
                </shape>
            </item>
            <item>
                <bitmap android:gravity="right|center_vertical" android:src="@android:drawable/arrow_down_float" />
            </item>

        </layer-list>
    </item>
</selector>

If you have any question or suggestions kindly use the comment box or you can contact us directly through our contact page below.

Add a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.