# Spinner

# Adding a spinner to your activity

In /res/values/strings.xml:

<string-array name="spinner_options">
    <item>Option 1</item>
    <item>Option 2</item>
    <item>Option 3</item>
</string-array>

In layout XML:

<Spinner
    android:id="@+id/spinnerName"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:entries="@array/spinner_options" />

In Activity:

Spinner spinnerName = (Spinner) findViewById(R.id.spinnerName);
spinnerName.setOnItemSelectedListener(new OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
         String chosenOption = (String) parent.getItemAtPosition(position);
    }
    @Override
    public void onNothingSelected(AdapterView<?> parent) {}
});

# Basic Spinner Example

Spinner It is a type of dropdown input. Firstly in layout


 <Spinner
    android:id="@+id/spinner"     <!-- id to refer this spinner from JAVA-->
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
    
</Spinner>

Now Secondly populate values in spinner There are mainly two ways to populate values in spinner.

  • From XML itself create a **array.xml** in **values** directory under **res**. Create this `array`
  • 
     <string-array name="defaultValue">
        <item>--Select City Area--</item>
        <item>--Select City Area--</item>
        <item>--Select City Area--</item>
    </string-array>
    
    

    Now add this line in sppiner XML

    
               android:entries="@array/defaultValue"
    
    
    1. You can also add values via JAVA

    if you are using in activity cityArea = (Spinner) findViewById(R.id.cityArea); else if you are using in fragment

    cityArea = (Spinner) findViewById(R.id.cityArea);
    
    

    Now create a arrayList of Strings

    ArrayList<String> area = new ArrayList<>();
    //add values in area arrayList
    cityArea.setAdapter(new ArrayAdapter<String>(context
                                , android.R.layout.simple_list_item_1, area));
    
    

    This will look like

    enter image description here (opens new window) enter image description here (opens new window)

    According to the device Android version it will render style

    Following are some of the default themes

    If an app does not explicitly request a theme in its manifest, Android System will determine the default theme based on the app’s targetSdkVersion to maintain the app’s original expectations:

    Android SDK Version Default Theme
    Version < 11 @android:style/Theme
    Version between 11 and 13 @android:style/Theme.Holo
    14 and higher @android:style/Theme.DeviceDefault

    Spinner can be easily customized with the help of xml eg

    
    android:background="@drawable/spinner_background"
    
     android:layout_margin="16dp"
    
     android:padding="16dp"
    
    

    Create a custom background in XML and use it.

    easily get the position and other details of the selected item in spinner

    cityArea.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                areaNo = position;
            }
    
            @Override
            public void onNothingSelected(AdapterView<?> parent) {
    
            }
        });
    
    

    Change the text color of the selected item in spinner

    This can be done in two ways in XML

    <item android:state_activated="true" android:color="@color/red"/>
    
    

    This will change the selected item color in the popup.

    and from JAVA do this (in the setOnItemSelectedListener(...))

    
    @Override
                public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                     ((TextView) parent.getChildAt(0)).setTextColor(0x00000000);
    // similarly change `background color` etc.
                }