Dynamic Spinner in Android
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:
Please Login to comment...