2009-10-11 7 views
3

Est-il possible de définir la largeur d'une liste déroulante de spinner dans le code? J'ai un spinner peuplé d'entiers, et il ne semble pas bien avec la liste d'expansion à pleine largeur. Puis-je définir la largeur pour envelopper le contenu en quelque sorte?Définir manuellement la largeur de la liste déroulante de spinner dans android

Spinner hSpinner = (Spinner) timerView.findViewById(R.id.timer_hour_spinner); 
ArrayList<Integer> hList = new ArrayList<Integer>(21); 

for (int i = 0; i <= 20; i++) { hList.add(i); } 

ArrayAdapter hAdapter = new ArrayAdapter(RemindMe.this, android.R.layout.simple_spinner_item, hList); 
hAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

hSpinner.setAdapter(hAdapter); 

Merci!

Linus

Répondre

1

Vous pouvez modifier la largeur de quoi que ce soit dans le code en ajustant son LayoutParams. Les détails de cela varie par conteneur (LinearLayout vs RelativeLayout vs ...).

Cependant, je suis confus pourquoi vous voulez changer la largeur "dans le code". Pourquoi ne pas simplement définir la largeur à wrap_content dans la mise en page XML?

+3

J'ai mis la largeur de la turbine à « wrap_content » dans le fichier de mise en page, mais lorsque je clique sur la fileuse dans l'application de la liste déroulante se développe à pleine largeur. C'est pourquoi j'ai pensé qu'il fallait redimensionner le code si possible. Je n'ai peut-être pas été clair dans ma question, mais c'est la liste déroulante sur laquelle je veux définir la largeur, pas l'objet spinner lui-même. Des idées? Et comme toujours, merci de votre aide! – aspartame

+0

Ah, désolé, mal compris. Vous pouvez essayer une autre mise en page pour la vue déroulante. Je ne sais pas si la largeur est définie par la disposition déroulante ou est intrinsèque à la boîte de dialogue qui est la "liste déroulante". Si c'est le dernier, il n'y a probablement rien que vous puissiez faire. – CommonsWare

+0

OK, j'ai pensé que ce serait désordonné si possible. En fait, j'ai sauté le spinner et suis allé chercher un SeekBar à la place. Ça a l'air bien, donc ça a fonctionné quand même! Merci de votre aide! – aspartame

0

Il est facile de contrôler l'apparence de la goutte à goutte. Essayez ceci:

//Step 1. create the drop down list 
static List<String> special_Spinner_Display_List = new ArrayList<String>(); 
// add your values to the list...(this is best done using a for loop) 
special_Spinner_Display_List.add(item1); 
special_Spinner_Display_List.add(item2); //etc., etc. 

//Step 2. build the spinner 
ArrayAdapter arrayAdapter_special = new ArrayAdapter(this, 
     R.layout.your_special_spinner, special_Spinner_Display_List); 
arrayAdapter_special.setDropDownViewResource(R.layout.special_spinner_dropdown); 
specialSpinner.setAdapter(arrayAdapter_special); 

//Step 3. create an XML layout file called special_spinner_dropdown where you can 
//style to your heart's content. Here's an example: 

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/SpinnerDropdown" 
style="?android:attr/spinnerDropDownItemStyle" 
android:layout_width="match_parent" 
android:layout_height="60dp" 
android:background="#D5ECED" 
android:ellipsize="marquee" 
android:singleLine="true" 
android:textSize="24sp" 
android:textStyle="bold" 
android:textColor="@color/black" /> 

C'est tout. Lemme savoir comment ça marche!

+1

savez-vous comment définir la largeur de la ressource déroulante? ça ne semble pas fonctionner. –

2

utiliser Just:

setDropDownWidth(desiredWidth); 
+7

ajouté dans api niveau 16 .. – f20k

+0

comment puis-je utiliser pour API inférieure toute idée grâce –

+1

sauvé ma journée :) – Qasim

0

Réglage de la largeur déroulant dans le fichier xml de spinner en utilisant la balise

android: dropdownWidth = "@ dimen/desired_width"

Explaination:

mDropDownWidth = pa.getLayoutDimension(R.styleable.Spinner_dropDownWidth, 
     ViewGroup.LayoutParams.WRAP_CONTENT); 

ce champ est utilisé pour la largeur de la liste déroulante lorsque l'élément spinner est initialisé dans la classe Spinner

pour changer programatically largeur de menu déroulant spinner au dessus du niveau de api 16, utilisez

mSpinner.setDropDownWidth(size_in_pixel); 
Questions connexes