Add a Hint to Spinner
Spinner allows users to select an item from a list. The item list is shown in a drop-down list. Android app users can select one value at a time. This is a single selection drop-down menu. By default Spinner shows a single value at a time and this is the selected value.
There is no direct way to show a hint in the Spinner widget. A hint is useful to guide users on what they should do in this widget. Such as a hint maybe with the text ‘Select an item’. The hint should be a nonselectable item and this is not the actual list value.
In this android app development tutorial, we will learn how can we add a hint to the Spinner widget. At first, we have to create an activity XML file where we put the Spinner widget.
The java file will allow us to make an array adapter to populate the Spinner widget with items. After creating an array adapter we will bind this adapter with Spinner control. At the beginning of the item array, we will put an extra item that will act as a Spinner hint, such as ‘Select an item’.
While we create the array adapter, we will disable the first element to make it a Spinner hint. Same time we will apply a dim color to the hint item text color. So it will clearly be visible as a non-selectable hint item. On other items’ text, we will apply black color which will display as Spinner selectable items.
Finally, on the Spinner selected item listener, we will display a toast message while the user selects an item from Spinner except for the first item. The first item will act as a Spinner hint.
There is no direct way to show a hint in the Spinner widget. A hint is useful to guide users on what they should do in this widget. Such as a hint maybe with the text ‘Select an item’. The hint should be a nonselectable item and this is not the actual list value.
In this android app development tutorial, we will learn how can we add a hint to the Spinner widget. At first, we have to create an activity XML file where we put the Spinner widget.
The java file will allow us to make an array adapter to populate the Spinner widget with items. After creating an array adapter we will bind this adapter with Spinner control. At the beginning of the item array, we will put an extra item that will act as a Spinner hint, such as ‘Select an item’.
While we create the array adapter, we will disable the first element to make it a Spinner hint. Same time we will apply a dim color to the hint item text color. So it will clearly be visible as a non-selectable hint item. On other items’ text, we will apply black color which will display as Spinner selectable items.
Finally, on the Spinner selected item listener, we will display a toast message while the user selects an item from Spinner except for the first item. The first item will act as a Spinner hint.
MainActivity.java
package com.cfsuman.androidtutorials;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Get the widgets reference from XML layout
Spinner spinner = findViewById(R.id.spinner);
// Initializing a String Array
String[] plants = new String[]{
"Select an item...",
"California sycamore",
"Mountain mahogany",
"Butterfly weed",
"Carrot weed"
};
// Convert array to a list
List<String> plantsList = new ArrayList<>
(Arrays.asList(plants));
// Initializing an ArrayAdapter
ArrayAdapter<String> spinnerArrayAdapter
= new ArrayAdapter<String>(
this,
android.R.layout.simple_dropdown_item_1line,
plantsList
){
@Override
public boolean isEnabled(int position){
// Disable the first item from Spinner
// First item will be use for hint
return position != 0;
}
@Override
public View getDropDownView(
int position, View convertView,
@NonNull ViewGroup parent) {
// Get the item view
View view = super.getDropDownView(
position, convertView, parent);
TextView textView = (TextView) view;
if(position == 0){
// Set the hint text color gray
textView.setTextColor(Color.GRAY);
}
else { textView.setTextColor(Color.BLACK); }
return view;
}
};
// Set the drop down view resource
spinnerArrayAdapter.setDropDownViewResource(
android.R.layout.simple_dropdown_item_1line
);
// Spinner on item selected listener
spinner.setOnItemSelectedListener(
new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(
AdapterView<?> parent, View view,
int position, long id) {
// Get the spinner selected item text
String selectedItemText = (String) parent
.getItemAtPosition(position);
// If user change the default selection
// First item is disable and
// it is used for hint
if(position > 0){
// Notify the selected item text
Toast.makeText(
getApplicationContext(),
"Selected : "
+ selectedItemText,
Toast.LENGTH_SHORT).show();
}
}
@Override
public void onNothingSelected(
AdapterView<?> parent) {
}
});
// Finally, data bind the spinner object with adapter
spinner.setAdapter(spinnerArrayAdapter);
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#DCDCDC"
android:padding="64dp">
<Spinner
android:id="@+id/spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

