¿Cómo agregar Custom Spinner en Android?

Spinner es un widget que se utiliza para seleccionar un elemento de una lista de elementos. Cuando el usuario toca una rueda giratoria, un menú desplegable es visible para el usuario. En este artículo, aprenderemos cómo agregar un girador personalizado en la aplicación. Si desea saber más sobre spinner en detalle, haga clic en este enlace .

Acercarse:

  1. Cree un nuevo archivo algoritmo_spinner.xml y agregue el siguiente código. Cada elemento de la ruleta tendrá este diseño, una vista de imagen y una vista de texto .

    algoritmo_spinner.xml

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
      
        <ImageView
            android:id="@+id/image_view"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:src="@drawable/gfg" />
      
        <TextView
            android:id="@+id/text_view"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBottom="@+id/image_view"
            android:layout_alignParentTop="true"
            android:layout_margin="20dp"
            android:layout_toEndOf="@+id/image_view"
            android:gravity="center"
            android:text="Quick Sort"
            android:textColor="@android:color/black"
            android:textSize="20sp" />
      
    </RelativeLayout>
  2. Cree un nuevo archivo AlgorithmItem.java y agregue el siguiente código a continuación. Esta es la clase de modelo que se utiliza para obtener el nombre del algoritmo cuando el usuario hace clic en cualquier elemento. Aquí definimos un constructor y un método getAlgorithmName que devuelve el nombre del algoritmo del objeto.

    AlgorithmItem.java

    package org.geeksforgeeks.gfgcustomspinner;
      
    public class AlgorithmItem {
        private String algorithmName;
      
        public AlgorithmItem(String countryName)
        {
            algorithmName = countryName;
        }
      
        public String getAlgorithmName()
        {
            return algorithmName;
        }
    }
  3. Cree un nuevo archivo AlgorithmAdapter.java y agregue el siguiente código. Aquí definimos nuestra propia clase Adapter . Mapea el elemento con su vista, proporcionando acceso a los datos del elemento en la lista de control giratorio.

    AlgorithmAdapter.java

    package org.geeksforgeeks.gfgcustomspinner;
      
    import android.content.Context;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ArrayAdapter;
    import android.widget.TextView;
    import androidx.annotation.NonNull;
    import androidx.annotation.Nullable;
    import java.util.ArrayList;
      
    public class AlgorithmAdapter extends ArrayAdapter<AlgorithmItem> {
      
        public AlgorithmAdapter(Context context,
                                ArrayList<AlgorithmItem> algorithmList)
        {
            super(context, 0, algorithmList);
        }
      
        @NonNull
        @Override
        public View getView(int position, @Nullable
                                          View convertView, @NonNull ViewGroup parent)
        {
            return initView(position, convertView, parent);
        }
      
        @Override
        public View getDropDownView(int position, @Nullable
                                                  View convertView, @NonNull ViewGroup parent)
        {
            return initView(position, convertView, parent);
        }
      
        private View initView(int position, View convertView,
                              ViewGroup parent)
        {
            // It is used to set our custom view.
            if (convertView == null) {
                convertView = LayoutInflater.from(getContext()).inflate(R.layout.algorithm_spinner, parent, false);
            }
      
            TextView textViewName = convertView.findViewById(R.id.text_view);
            AlgorithmItem currentItem = getItem(position);
      
            // It is used the name to the TextView when the
            // current item is not null.
            if (currentItem != null) {
                textViewName.setText(currentItem.getAlgorithmName());
            }
            return convertView;
        }
    }
  4. Agregue el siguiente código en el archivo activity_main.xml. Aquí agregamos nuestra ruleta en el diseño. Esto agregará una vista de texto y un control giratorio .

    actividad_principal.xml

          
    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity">
      
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Learn Algorithms"
            android:textStyle="bold"
            android:textSize="18sp"
            android:layout_above="@+id/spinner_algorithm"
            android:layout_marginStart="10dp"
            android:layout_marginBottom="25dp"
            />
      
        <Spinner
            android:layout_margin="5dp"
            android:id="@+id/spinner_algorithm"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:layout_marginTop="18dp" />
      
    </RelativeLayout>
  5. Ahora agregue el siguiente código en el archivo MainActivity.java . Aquí se crea el objeto de clase AlgorithmAdapter y actúa como un adaptador para el control giratorio y agrega onItemSelectedListner() a nuestro control giratorio. Cuando el usuario toca cualquier elemento de la ruleta, se invoca. Muestra un brindis con el nombre del elemento que el usuario seleccionó de la lista.

    MainActivity.java

    package org.geeksforgeeks.gfgcustomspinner;
      
    import androidx.appcompat.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.AdapterView;
    import android.widget.Spinner;
    import android.widget.Toast;
    import java.util.ArrayList;
      
    public class MainActivity extends AppCompatActivity {
      
        ArrayList<AlgorithmItem> algorithmItems;
        AlgorithmAdapter adapter;
      
        @Override
        protected void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
      
            initList();
            Spinner spinner = findViewById(R.id.spinner_algorithm);
      
            // we pass our item list and context to our Adapter.
            adapter = new AlgorithmAdapter(this, algorithmItems);
            spinner.setAdapter(adapter);
      
            spinner.setOnItemSelectedListener(
                new AdapterView.OnItemSelectedListener() {
                    @Override
                    public void onItemSelected(AdapterView<?> parent,
                                               View view, int position, long id)
                    {
      
                        // It returns the clicked item.
                        AlgorithmItem clickedItem = (AlgorithmItem)
                                                        parent.getItemAtPosition(position);
                        String name = clickedItem.getAlgorithmName();
                        Toast.makeText(MainActivity.this, name + " selected", Toast.LENGTH_SHORT).show();
                    }
                    @Override
                    public void onNothingSelected(AdapterView<?> parent)
                    {
                    }
                });
        }
      
        // It is used to set the algorithm names to our array list.
        private void initList()
        {
            algorithmItems = new ArrayList<>();
            algorithmItems.add(new AlgorithmItem("Quick Sort"));
            algorithmItems.add(new AlgorithmItem("Merge Sort"));
            algorithmItems.add(new AlgorithmItem("Heap Sort"));
            algorithmItems.add(new AlgorithmItem("Prims Algorithm"));
            algorithmItems.add(new AlgorithmItem("Kruskal Algorithm"));
            algorithmItems.add(new AlgorithmItem("Rabin Karp"));
            algorithmItems.add(new AlgorithmItem("Binary Search"));
        }
    }

Producción:

Publicación traducida automáticamente

Artículo escrito por madhavmaheshwarimm20 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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