Solución:
Aquí hay una solución que probablemente sea un poco más simple que el código Ravi Vyas (¡gracias por la inspiración!):
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_dropdown_item) {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = super.getView(position, convertView, parent);
if (position == getCount()) {
((TextView)v.findViewById(android.R.id.text1)).setText("");
((TextView)v.findViewById(android.R.id.text1)).setHint(getItem(getCount())); //"Hint to be displayed"
}
return v;
}
@Override
public int getCount() {
return super.getCount()-1; // you dont display last item. It is used as hint.
}
};
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
adapter.add("Item 1");
adapter.add("Item 2");
adapter.add("Hint to be displayed");
spinner.setAdapter(adapter);
spinner.setSelection(adapter.getCount()); //display hint
Puede configurar su propio adaptador giratorio y anular el método getView para mostrar la pista en lugar de un elemento. He creado un proyecto de muestra en github, compruébalo aquí
Una forma aún más fácil que configurar su propio adaptador giratorio es simplemente usar un botón y darle estilo como un objeto giratorio con
android:background="@android:drawable/btn_dropdown"
Luego configure el evento onClick del botón para abrir un cuadro de diálogo de selección de un solo elemento. Luego puede hacer lo que quiera con el texto del botón.
Esta ha sido mi forma preferida de manejar esto durante un tiempo. Espero que ayude a alguien.
EDITAR: He estado jugando con esto nuevamente recientemente (y alguien me pidió que publicara un ejemplo hace un tiempo). Esta estrategia se verá un poco diferente si está utilizando el tema Holo. Sin embargo, si está utilizando otros temas como Theme.Black, este se verá idéntico.
Para demostrar esto, hice una aplicación simple que tiene un Spinner regular junto con mi botón giratorio personalizado. Lancé esto en un repositorio de GitHub, pero así es como se ve la actividad:
package com.stevebergamini.spinnerbutton;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Spinner;
public class MainActivity extends Activity {
Spinner spinner1;
Button button1;
AlertDialog ad;
String[] countries;
int selected = -1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
spinner1 = (Spinner) findViewById(R.id.spinner1);
button1 = (Button) findViewById(R.id.button1);
countries = getResources().getStringArray(R.array.country_names);
// You can also use an adapter for the allert dialog if you'd like
// ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, countries);
ad = new AlertDialog.Builder(MainActivity.this).setSingleChoiceItems(countries, selected,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
button1.setText(countries[which]);
selected = which;
ad.dismiss();
}}).setTitle(R.string.select_country).create();
button1.setOnClickListener( new OnClickListener(){
@Override
public void onClick(View v) {
ad.getListView().setSelection(selected);
ad.show();
}});
}
}