Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


¿Cómo puedo crear un Spinner de Android como una ventana emergente?

Quiero abrir un diálogo giratorio cuando el usuario toque un elemento de menú para permitir al usuario seleccionar un elemento.

¿Necesito un diálogo separado para esto o puedo usar Spinner directamente? Veo este enlace, menciona una opción MODE_DIALOG pero ya no parece estar definida. AlertDialog puede estar bien, pero todas las opciones dicen que "hacer clic en un elemento de la lista no descartará el diálogo", que es lo que quiero. ¿Cualquier sugerencia?

Idealmente, el código sería similar al caso en el que el hilandero se muestra en la pantalla:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(activity, android.R.layout.simple_spinner_item, items); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); myspinner.setAdapter(adapter); // myspinner.showAsDialog() <-- what i want 

  • Mantener la actividad siempre en la parte superior de la pila, o en el foco cuando las aplicaciones desleales lanzar las actividades?
  • Obtener eventos táctiles en un diálogo que se muestra mientras el dedo ya estaba tocando la pantalla
  • Tostas versus cuadros de diálogo: ¿cuál usar cuando?
  • Crear un diálogo transparente encima de la actividad
  • Android: aumenta AlertDialog desde el subproceso de fondo
  • Android: ¿En qué circunstancias podría aparecer un diálogo que cause onPause ()?
  • Android: Dialog de progreso no girando
  • Mostrar diálogo de la rueda giratoria mientras carga datos en Android
  • 9 Solutions collect form web for “¿Cómo puedo crear un Spinner de Android como una ventana emergente?”

    Puede utilizar un diálogo de alerta

      AlertDialog.Builder b = new Builder(this); b.setTitle("Example"); String[] types = {"By Zip", "By Category"}; b.setItems(types, new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); switch(which){ case 0: onZipRequested(); break; case 1: onCategoryRequested(); break; } } }); b.show(); 

    Esto cerrará el diálogo cuando uno de ellos sea presionado como si estuviera deseando. ¡Espero que esto ayude!

    En xml hay opción

     android:spinnerMode="dialog" 

    Utilizar esto para el modo de diálogo

    Prueba esto:

     Spinner popupSpinner = new Spinner(context, Spinner.MODE_DIALOG); 

    Vea este enlace para más detalles.

    MODE_DIALOG y MODE_DROPDOWN se definen en la API 11 (Honeycomb). MODE_DIALOG describe el comportamiento habitual en las versiones anteriores de la plataforma.

    Añadir un atributo pequeño como android:spinnerMode="dialog" mostraría el contenido de la ruleta en un pop-up.

    Puede crear su propio cuadro de diálogo personalizado. Es bastante fácil. Si desea descartarlo con una selección en el hilandero, añada un OnItemClickListener y agregue

     int n = mSpinner.getSelectedItemPosition(); mReadyListener.ready(n); SpinnerDialog.this.dismiss(); 

    Como en el OnClickListener para el botón Aceptar. Hay una advertencia, sin embargo, y es que el oyente onclick no se dispara si vuelve a seleccionar la opción predeterminada. También necesita el botón Aceptar.

    Comience con el diseño:

    Res / layout / spinner_dialog.xml :

     <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content"> <TextView android:id="@+id/dialog_label" android:layout_height="wrap_content" android:layout_width="fill_parent" android:hint="Please select an option" /> <Spinner android:id="@+id/dialog_spinner" android:layout_height="wrap_content" android:layout_width="fill_parent" /> <Button android:id="@+id/dialogOK" android:layout_width="120dp" android:layout_height="wrap_content" android:text="OK" android:layout_below="@id/dialog_spinner" /> <Button android:id="@+id/dialogCancel" android:layout_width="120dp" android:layout_height="wrap_content" android:text="Cancel" android:layout_below="@id/dialog_spinner" android:layout_toRightOf="@id/dialogOK" /> </RelativeLayout> 

    A continuación, cree la clase:

    Src / your / package / SpinnerDialog.java :

     public class SpinnerDialog extends Dialog { private ArrayList<String> mList; private Context mContext; private Spinner mSpinner; public interface DialogListener { public void ready(int n); public void cancelled(); } private DialogListener mReadyListener; public SpinnerDialog(Context context, ArrayList<String> list, DialogListener readyListener) { super(context); mReadyListener = readyListener; mContext = context; mList = new ArrayList<String>(); mList = list; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.spinner_dialog); mSpinner = (Spinner) findViewById (R.id.dialog_spinner); ArrayAdapter<String> adapter = new ArrayAdapter<String> (mContext, android.R.layout.simple_spinner_dropdown_item, mList); mSpinner.setAdapter(adapter); Button buttonOK = (Button) findViewById(R.id.dialogOK); Button buttonCancel = (Button) findViewById(R.id.dialogCancel); buttonOK.setOnClickListener(new android.view.View.OnClickListener(){ public void onClick(View v) { int n = mSpinner.getSelectedItemPosition(); mReadyListener.ready(n); SpinnerDialog.this.dismiss(); } }); buttonCancel.setOnClickListener(new android.view.View.OnClickListener(){ public void onClick(View v) { mReadyListener.cancelled(); SpinnerDialog.this.dismiss(); } }); } } 

    Finalmente, úsalo como:

     mSpinnerDialog = new SpinnerDialog(this, mTimers, new SpinnerDialog.SpinnerListener() { public void cancelled() { // do your code here } public void ready(int n) { // do your code here } }); 

    Aquí hay una subclase Spinner que reemplaza performClick () para mostrar un diálogo en lugar de una lista desplegable. No se requiere XML. Pruébalo, házmelo saber si funciona para ti.

     public class DialogSpinner extends Spinner { public DialogSpinner(Context context) { super(context); } @Override public boolean performClick() { new AlertDialog.Builder(getContext()).setAdapter((ListAdapter) getAdapter(), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { setSelection(which); dialog.dismiss(); } }).create().show(); return true; } } 

    Para obtener más información, lea este artículo: Cómo hacer que las opciones de Spinner de Android aparezcan en un cuadro de diálogo

     android:spinnerMode="dialog" // Creating adapter for spinner ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, categories); // Drop down layout style - list view with radio button dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // attaching data adapter to spinner spinner.setAdapter(dataAdapter); 

    Esto es del código fuente de Android SDK. Como puedes ver, tienes un constructor especial para crear un Spinner con el modo especificado que quieres usar.

    Espero que te ayude 🙂

      /** * Construct a new spinner with the given context's theme, the supplied attribute set, * and default style. <code>mode</code> may be one of {@link #MODE_DIALOG} or * {@link #MODE_DROPDOWN} and determines how the user will select choices from the spinner. * * @param context The Context the view is running in, through which it can * access the current theme, resources, etc. * @param attrs The attributes of the XML tag that is inflating the view. * @param defStyle The default style to apply to this view. If 0, no style * will be applied (beyond what is included in the theme). This may * either be an attribute resource, whose value will be retrieved * from the current theme, or an explicit style resource. * @param mode Constant describing how the user will select choices from the spinner. * * @see #MODE_DIALOG * @see #MODE_DROPDOWN */ public Spinner(Context context, AttributeSet attrs, int defStyle, int mode) { super(context, attrs, defStyle); 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.