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
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.
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 à
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:
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; } }
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.
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
créer custom_spinner.xml dans le dossier de mise en page et coller ce code
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));
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
: