In this tutorial we will how to style the dropdown view of spinner widget.
String
Add string-array to string.xml , this will be used as entries for spinner
<resources> <string name="app_name">AndroidCustomSpinner</string> <string-array name="mode"> <item>option0</item> <item>option1</item> <item>option2</item> <item>option3</item> <item>option4</item> <item>option5</item> <item>option6</item> <item>option7</item> </string-array> <string name="prompt">Select Mode</string> </resources>
Main XML layout
- Create XML Layout activity_main.xml , this will be set as content view for launcher Activity (MainActivity.kt)
- Add Spinner Widget "AppCompatSpinner" to xml layout
- android:entries="@array/entries" is used to set the values for spinner
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" android:padding="30dp"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Custom Spinner" android:layout_marginTop="20dp" android:textSize="20sp" android:textStyle="bold"/> <androidx.appcompat.widget.AppCompatSpinner android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="16dp" android:id="@+id/spinner03" /> </LinearLayout>
Styling Spinner Item
We will define two xml layout for spinner item
1. Custom XML Layout For Selected Item
The below xml layout is applied to selected spinner (or when spinner is not in dropdownView) .
file: simple_spinner_item.xml
<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="18sp" android:gravity="start" android:padding="10dip"/>
2. Custom XML Layout for DropDownViewResource
The below xml layout is applied to spinner item , when it is in dropdownview .
file: simple_spinner_drop_down.xml
<?xml version="1.0" encoding="utf-8"?> <CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/text1" style="@style/spinnerDropDownItemStyle" android:layout_width="match_parent" android:layout_height="wrap_content" android:ellipsize="marquee" android:padding="10dip" android:singleLine="true"/>
Style
Add the below Style inside style.xml
<style name="spinnerDropDownItemStyle" parent="android:TextAppearance.Widget.TextView.SpinnerItem"> <item name="android:textStyle">italic</item> <item name="android:background">#79ACD6</item> <item name="android:textSize">18sp</item> <item name="android:textColor">#FFFFFF</item> </style>
Applying Above Defined Custom XML Layout to Spinner
val stringArr: Array<String> = resources.getStringArray(R.array.mode); val dataAdapter = ArrayAdapter<String>(this, R.layout.simple_spinner_item, stringArr) dataAdapter.setDropDownViewResource(R.layout.simple_spinner_drop_down) spinner03.adapter = dataAdapter
Main Activity
file : MainActivity.kt
package com.tutorialsbuzz.androidcustomspinner import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.view.View import android.widget.AdapterView import android.widget.ArrayAdapter import android.widget.Toast import kotlinx.android.synthetic.main.activity_main.* class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) //custom spinner val stringArr: Array<String> = resources.getStringArray(R.array.mode); val dataAdapter = ArrayAdapter<String>(this, R.layout.simple_spinner_item, stringArr) dataAdapter.setDropDownViewResource(R.layout.simple_spinner_drop_down) spinner03.adapter = dataAdapter spinner03.onItemSelectedListener = object : AdapterView.OnItemSelectedListener { override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) { Toast.makeText(this@MainActivity, stringArr[position], Toast.LENGTH_SHORT) .show() } override fun onNothingSelected(parent: AdapterView<*>?) { } } } }
No comments:
Post a Comment