Saltar al contenido

¿Es posible establecer hint Spinner en Android?

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();              
            }});

    }
}
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *