Comment personnaliser un Spinner dans Android

Je veux append une hauteur personnalisée à la liste déroulante d’un Spinner , par exemple 30dp, et je veux masquer les séparateurs de la liste déroulante de Spinner .

Jusqu’à présent, j’ai essayé d’appliquer le style suivant au Spinner :

  0dp 533dp none 0dp @drawable/new_bg 70dp true @android:color/white  

et le code de mon spinner est:

  

Mais rien ne semble fonctionner.

Créez un adaptateur personnalisé avec une disposition personnalisée pour votre spinner.

 Spinner spinner = (Spinner) findViewById(R.id.pioedittxt5); ArrayAdapter adapter = ArrayAdapter.createFromResource(this, R.array.travelreasons, R.layout.simple_spinner_item); adapter.setDropDownViewResource(R.layout.simple_spinner_dropdown_item); spinner.setAdapter(adapter); 

R.layout.simple_spinner_item

  

R.layout.simple_spinner_dropdown_item

  

Dans les styles, ajoutez vos dimensions et votre hauteur personnalisées selon vos besoins.

    

Vous pouvez créer un design spinner entièrement personnalisé comme

Etape 1: Dans le dossier pouvant être dessiné, créez background.xml comme bordure du disque.

       

Etape 2: pour la mise en page de spinner, utilisez cette icône déroulante ou n’importe quelle image drop.png entrer la description de l'image ici

      

Enfin, ressemble à l’image ci-dessous et il est partout cliquable dans la zone ronde et pas besoin d’écrire cliquez sur Lister pour imageView.

entrer la description de l'image ici

Etape 3: Pour une conception déroulante, supprimez la ligne de la liste déroulante et modifiez la couleur d’arrière-plan. Créez un adaptateur personnalisé tel que

 Spinner spinner = (Spinner) findViewById(R.id.spinner1); Ssortingng[] years = {"1996","1997","1998","1998"}; ArrayAdapter langAdapter = new ArrayAdapter(getActivity(), R.layout.spinner_text, years ); langAdapter.setDropDownViewResource(R.layout.simple_spinner_dropdown); mSpinner5.setAdapter(langAdapter); 

Dans le dossier pouvant être dessiné, créez R.layout.spinner_text.xml

   

Dans le dossier pouvant être dessiné, créez simple_spinner_dropdown.xml

   

Dans les styles, vous pouvez append des dimensions et une hauteur personnalisées selon vos besoins.

   

Enfin ressemble à

entrer la description de l'image ici

Selon les besoins, vous pouvez modifier la couleur d’arrière-plan et le texte de la couleur déroulante en modifiant la couleur d’arrière-plan ou la couleur du texte de simple_spinner_dropdown.xml.

La solution la plus élégante et la plus flexible que j’ai trouvée jusqu’ici est la suivante: http://android-er.blogspot.sg/2010/12/custom-arrayadapter-for-spinner-with.html

Fondamentalement, suivez ces étapes:

  1. Créer un fichier XML de présentation personnalisé pour votre élément de liste déroulante, disons que je l’appellerai spinner_item.xml
  2. Créez une classe de vue personnalisée pour votre adaptateur déroulant. Dans cette classe personnalisée, vous devez écraser et définir la disposition de vos éléments de liste déroulante personnalisés dans la méthode getView () et getDropdownView (). Mon code est comme ci-dessous:

     public class CustomArrayAdapter extends ArrayAdapter{ private List objects; private Context context; public CustomArrayAdapter(Context context, int resourceId, List objects) { super(context, resourceId, objects); this.objects = objects; this.context = context; } @Override public View getDropDownView(int position, View convertView, ViewGroup parent) { return getCustomView(position, convertView, parent); } @Override public View getView(int position, View convertView, ViewGroup parent) { return getCustomView(position, convertView, parent); } public View getCustomView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater=(LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE ); View row=inflater.inflate(R.layout.spinner_item, parent, false); TextView label=(TextView)row.findViewById(R.id.spItem); label.setText(objects.get(position)); if (position == 0) {//Special style for dropdown header label.setTextColor(context.getResources().getColor(R.color.text_hint_color)); } return row; } } 
  3. Dans votre activité ou fragment, utilisez l’adaptateur personnalisé pour votre vue Spinner. Quelque chose comme ça:

     Spinner sp = (Spinner)findViewById(R.id.spMySpinner); ArrayAdapter myAdapter = new CustomArrayAdapter(this, R.layout.spinner_item, options); sp.setAdapter(myAdapter); 

où options est la liste de la chaîne de liste déroulante.

Essaye ça

Je faisais face à beaucoup de problèmes quand j’essayais une autre solution …… Après beaucoup de R & D maintenant j’ai eu la solution

  1. créer custom_spinner.xml dans le dossier de mise en page et coller ce code

           
  2. dans votre activité

     Spinner spinner =(Spinner)view.findViewById(R.id.sp_colorpalates); Ssortingng[] years = {"1996","1997","1998","1998"}; spinner.setAdapter(new SpinnerAdapter(this, R.layout.custom_spinner, years)); 
  3. créer une nouvelle classe d’adaptateur

     public class SpinnerAdapter extends ArrayAdapter { private Ssortingng[] objects; public SpinnerAdapter(Context context, int textViewResourceId, Ssortingng[] objects) { super(context, textViewResourceId, objects); this.objects=objects; } @Override public View getDropDownView(int position, View convertView, @NonNull ViewGroup parent) { return getCustomView(position, convertView, parent); } @NonNull @Override public View getView(int position, View convertView, @NonNull ViewGroup parent) { return getCustomView(position, convertView, parent); } private View getCustomView(final int position, View convertView, ViewGroup parent) { View row = LayoutInflater.from(parent.getContext()).inflate(R.layout.custom_spinner, parent, false); final TextView label=(TextView)row.findViewById(R.id.tv_spinnervalue); label.setText(objects[position]); return row; } 

    }

Cela a fonctionné pour moi:

 ArrayAdapter adapter = new ArrayAdapter(getActivity(),R.layout.simple_spinner_item,areas); Spinner areasSpinner = (Spinner) view.findViewById(R.id.area_spinner); areasSpinner.setAdapter(adapter); 

et dans mon dossier de mise en page, j’ai créé simple_spinner_item :