Many times in android applications we have to create any view dynamically without writing any XML code. For that, we can create our view using our Kotlin or Java file. In this article, we will take a look at How to Dynamically create a spinner in an android application. A sample video is given below to get an idea about what we are going to do in this article.
Note: This Android article covered in both Java and Kotlin languages.Â
Step by Step Implementation
Step 1: Create a New Project in Android Studio
To create a new project in Android Studio please refer to How to Create/Start a New Project in Android Studio.
Step 2: Working with the activity_main.xml file
Navigate to app > res > layout > activity_main.xml and add the code below. Comments are added in the code to get to know in detail.Â
XML
<? xml version = "1.0" encoding = "utf-8" ?> <!--on below line we are creating our linear layout--> < LinearLayout     android:id = "@+id/idLLContainer"     android:layout_width = "match_parent"     android:layout_height = "wrap_content"     android:layout_centerInParent = "true"     android:layout_gravity = "center"     android:gravity = "center"     android:orientation = "vertical"     tools:context = ".MainActivity" > </ LinearLayout > |
Step 3: Working with the MainActivity fileÂ
Navigate to app > java > your app’s package name > MainActivity file and add the below code to it. Comments are added in the code to get to know in detail.Â
Kotlin
package com.gtappdevelopers.kotlingfgproject Â
import android.graphics.Typeface import android.os.Bundle import android.view.Gravity import android.view.View import android.view.ViewGroup import android.widget.* import androidx.appcompat.app.AppCompatActivity import androidx.core.view.setPadding Â
class MainActivity : AppCompatActivity() { Â
    // on below line we are creating a variable.     lateinit var languagesList: List<String>     lateinit var containerLL: LinearLayout Â
    override fun onCreate(savedInstanceState: Bundle?) {         super .onCreate(savedInstanceState)         setContentView(R.layout.activity_main) Â
        // on below line we are initializing our variables         languagesList = ArrayList()         containerLL = findViewById(R.id.idLLContainer) Â
        // on below line we are adding languages         // to our language list         languagesList = languagesList + "Java"         languagesList = languagesList + "Kotlin"         languagesList = languagesList + "C++"         languagesList = languagesList + "C" Â
        // on below line we are creating layout         // params for text view.         // and specifying width as match parent         // and height as wrap content         val txtLayoutParam = LinearLayout.LayoutParams(             ViewGroup.LayoutParams.MATCH_PARENT,             ViewGroup.LayoutParams.WRAP_CONTENT         )         // on below line we are adding gravity         txtLayoutParam.gravity = Gravity.CENTER Â
        // on below line we are creating layout params for spinner.         // and specifying width as wrap parent and height as wrap content         val spinnerLayoutParam = LinearLayout.LayoutParams(             ViewGroup.LayoutParams.WRAP_CONTENT,             ViewGroup.LayoutParams.WRAP_CONTENT         ) Â
        // on below line we are adding gravity         spinnerLayoutParam.gravity = Gravity.CENTER Â
        // on below line we are creating our dynamic text view         val headingTV = TextView( this )                  // on the below line we are setting for our text view.         headingTV.text = "Dynamic Spinner in Android"                  // on below line we are updating text size.         headingTV.textSize = 20f                  // on below line we are updating text color and font         headingTV.setTextColor(resources.getColor(R.color.black))         headingTV.typeface = Typeface.DEFAULT_BOLD                  // on below line we are adding padding         headingTV.setPadding( 20 )                  // on below line we are specifying text alignment.         headingTV.textAlignment = TextView.TEXT_ALIGNMENT_CENTER                  // on below line we are adding layout         // param for heading text view.         headingTV.layoutParams = txtLayoutParam Â
Â
        //create spinner programmatically         val spinner = Spinner( this ) Â
        // on below line we are adding params for spinner.         spinner.layoutParams = spinnerLayoutParam Â
        // on below line we are adding our views         // to container linear layout         containerLL.addView(headingTV)         containerLL.addView(spinner) Â
        // on below line we are checking         // if spinner is not null         if (spinner != null ) { Â
            // on below line we are initializing             // and setting our adapter             // to our spinner.             val adapter = ArrayAdapter( this , android.R.layout.simple_spinner_item, languagesList)             spinner.adapter = adapter Â
            // on below line we are adding on item selected listener for spinner.             spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {                 override fun onItemSelected(                     parent: AdapterView<*>,                     view: View, position: Int, id: Long                 ) {                     // in on selected listener we are displaying a toast message                     Toast.makeText(                         this @MainActivity ,                         "Selected Language is : " +                                 "" + languagesList[position], Toast.LENGTH_SHORT                     ).show()                 } Â
                override fun onNothingSelected(parent: AdapterView<*>) {                 }             }         }     } } |
Java
package com.gtappdevelopers.kotlingfgproject; Â
import android.graphics.Typeface; import android.os.Build; import android.os.Bundle; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.LinearLayout; import android.widget.Spinner; import android.widget.TextView; import android.widget.Toast; import androidx.annotation.RequiresApi; import androidx.appcompat.app.AppCompatActivity; import java.util.ArrayList; Â
public class MainActivity extends AppCompatActivity { Â
    // on below line we are creating variables.     private LinearLayout containerLL;     private ArrayList<String> languageList; Â
    @RequiresApi (api = Build.VERSION_CODES.JELLY_BEAN_MR1)     @Override     protected void onCreate(Bundle savedInstanceState) {         super .onCreate(savedInstanceState);         setContentView(R.layout.activity_main); Â
        // on below line we are initializing our variables.         containerLL = findViewById(R.id.idLLContainer);         languageList = new ArrayList<>(); Â
        // on below line we are adding         // languages to our language list         languageList.add( "Java" );         languageList.add( "Kotlin" );         languageList.add( "C++" );         languageList.add( "C" ); Â
        // on below line we are creating layout params for text view.         // and specifying width as match parent and height as wrap content         LinearLayout.LayoutParams txtLayoutParam = new LinearLayout.LayoutParams(                 ViewGroup.LayoutParams.MATCH_PARENT,                 ViewGroup.LayoutParams.WRAP_CONTENT         );         // on below line we are adding gravity         txtLayoutParam.gravity = Gravity.CENTER; Â
        // on below line we are creating layout params for spinner.         // and specifying width as wrap parent and height as wrap content         LinearLayout.LayoutParams spinnerLayoutParam = new LinearLayout.LayoutParams(                 ViewGroup.LayoutParams.WRAP_CONTENT,                 ViewGroup.LayoutParams.WRAP_CONTENT         );         // on below line we are adding gravity         spinnerLayoutParam.gravity = Gravity.CENTER; Â
        // on below line we are creating our dynamic text view         TextView headingTV = new TextView( this );                 // on below line we are setting for our text view.         headingTV.setText( "Dynamic Spinner in Android" );                  // on below line we are updating text size.         headingTV.setTextSize(20f);                  // on below line we are updating text color and font         headingTV.setTextColor(getResources().getColor(R.color.black));         headingTV.setTypeface(Typeface.DEFAULT_BOLD);                  // on below line we are adding padding         headingTV.setPadding( 20 , 20 , 20 , 20 );                  // on below line we are specifying text alignment.         headingTV.setTextAlignment(View.TEXT_ALIGNMENT_CENTER);                  // on below line we are adding layout param         // for heading text view.         headingTV.setLayoutParams(txtLayoutParam); Â
        // create spinner programmatically         Spinner spinner = new Spinner( this );                  // on below line we are adding params for spinner.         spinner.setLayoutParams(spinnerLayoutParam); Â
        // on below line we are adding our         // views to container linear layout         containerLL.addView(headingTV);         containerLL.addView(spinner); Â
        // on below line we are checking if spinner is not null         if (spinner != null ) {             // on below line we are initializing and setting our adapter             // to our spinner.             ArrayAdapter adapter = new ArrayAdapter( this , android.R.layout.simple_spinner_item, languageList);             spinner.setAdapter(adapter);             // on below line we are adding on item selected listener for spinner.             spinner.setOnItemSelectedListener( new AdapterView.OnItemSelectedListener() {                 @Override                 public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {                     // in on selected listener we are displaying a toast message                     Toast.makeText(MainActivity. this , "Selected Language is : " + languageList.get(position), Toast.LENGTH_SHORT).show();                 } Â
                @Override                 public void onNothingSelected(AdapterView<?> parent) { Â
                }             });         }     } } |
Now run your application to see the output of it.Â
Output: