Pro tip: Take a second look at Android's spinner widget

William J. Francis goes back to basics with this beginner Android tutorial on when and how to use UI kit spinner widgets.


Prior to developing Android apps, I used a lot of drop-down lists when building user interfaces. Drop-downs provide a way to limit the user's choices to a list selection, without eating up all the screen real estate that a traditional list view would consume.

When I built my first Android app, I was shocked to discover there wasn't a drop-down list widget. A quick Google search corrected my vernacular. For whatever reason, the architects of the Android SDK chose to rename what I knew as a drop-down list to a spinner. Whew.

However, my relief didn't last long. The first time I added a drop-down, I mean spinner, to one of my layouts, I was horrified at the eyesore that appeared on my emulator (Figure A).

Figure A


As a result I decided to go the list view route -- but that was five years ago. So several weeks ago when I caught myself implementing a list view when what really made the most sense was a spinner, I decided to see how far things have come. The answer was a long way.

The tutorial that follows is a very simple re-introduction to Android's spinner widget. Feel free to follow along or import the entire project directly into Eclipse.

1. Create a new project in Eclipse targeting Android 4.0 (ICS) or better.

2. In the /res/layout folder, modify the activity_main.xml file to include a spinner widget wrapped by a linear layout.

<LinearLayout xmlns:android=""

        android:text="Spinner Widget" />
	    android:layout_height="wrap_content" />


3. Modify in the /src folder. The code is very typical of working with Android widgets. Find the resource, assign it some value, and wire up a listener for responding to changes.

package com.authorwjf.spinnerdemo;

import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.Toast;

public class MainActivity extends Activity implements OnItemSelectedListener {
	private String[] colors = {"Red", "Orange", "Yellow", "Green", "Blue", "Indigo", "Violet"};

	protected void onCreate(Bundle savedInstanceState) {
		ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, colors);
		Spinner spinner = (Spinner) findViewById(;

	public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
		Toast.makeText(this, "Selection: "+colors[pos], Toast.LENGTH_SHORT).show();

	public void onNothingSelected(AdapterView<?> parent) {
		Toast.makeText(this, "Selections cleared.", Toast.LENGTH_SHORT).show();


Here is a look at the latest and vastly improved out-of-the box user experience provided by the spinner widget (Figure B).

Figure B


A question I often get asked by developers new to the platform is: When should one use a list activity for a selection, and when is a spinner the appropriate choice? As a rule of thumb I like to think in terms of navigation. If selecting an item will force the user to a new activity or fragment, then generally I go with a list activity; if not, I think a spinner is a better choice -- the caveat being if you can get away with only supporting Honeycomb or better. If you must support older versions of Android, then I say do what you must to avoid the offensive original spinner user experience.

Also see