2011-10-09 5 views
5

J'ai regardé la plupart des questions sur ce sujet et il ne semble pas y avoir de réponse définitive. J'ai trois filatures dans différentes rangées d'une vue de table. En utilisant l'attribut weight, les cellules de la table et, par conséquent, les spinners et les vues de texte ont toutes la même largeur. Toutefois, lorsqu'un utilisateur clique sur un compteur, la liste déroulante apparaît en pleine largeur et couvre toute la table. Il doit y avoir un moyen de restreindre la largeur de la liste. Il ne contient qu'un nombre avec un maximum de 4 chiffres après tout.Android: Réduire la largeur de la liste déroulante d'un spinner

J'ai vu une note sur R.attr.dropDownWidth qui semble utile, mais je ne sais pas comment implémenter cette méthode, et encore moins si cela fonctionnera réellement.

Toute aide sur cette méthode ou sur une autre méthode qui limitera la largeur de la liste déroulante à environ 100 points sera vraiment appréciée - en particulier si le code d'échantillon est inclus.

Merci,

Alan ...

Répondre

5

Cependant, lorsqu'un spinner est cliqué, la liste déroulante apparaît à pleine largeur et couvre toute la table.

C'est parce que c'est vraiment une boîte de dialogue contextuelle.

Il doit y avoir un moyen de restreindre la largeur de la liste.

Ceci est difficile, car vous n'êtes pas celui qui crée le dialogue. Je ne vois même pas comment vous pourriez accomplir cela en prolongeant Spinner avec votre propre sous-classe, étant donné la façon dont est écrit Spinner. Vous devrez peut-être cloner le code source Spinner, le déplacer vers un autre package (ou nom de classe) et modifier performClick() pour modifier la taille du AlertDialog en utilisant les techniques décrites dans How to control the width and height of the default Alert Dialog in Android?. Et, gardez à l'esprit que le comportement de Spinner est significativement différent sur Honeycomb, et il reste à voir à quoi il ressemble sur Ice Cream Sandwich. Nous n'avons pas le code source Honeycomb, donc ma solution clone-the-class va vous donner des problèmes sur les nouveaux périphériques.

J'ai vu une note sur R.attr.dropDownWidth qui semble utile, mais je ne sais pas comment implémenter cette méthode, et encore moins si cela fonctionnera réellement.

Ce n'est pas une méthode, mais plutôt un attribut que vous pouvez définir dans un style. Cependant, basé sur le code source, il semble que ceci est seulement utilisé pour la liste déroulante de AutoCompleteTextView.

+0

Salut CommonsWare, Oui, je suis arrivé à la même conclusion et je vais laisser les choses comme elles sont. Comme vous le dites, cette situation peut être différente dans les versions ultérieures mais, pour l'instant au moins, je dois rester rétrocompatible. Merci quand même. Alan ... –

+0

Après avoir téléchargé sur un appareil différent, je remarque que les éléments du spinner et la liste sont assez difficiles à sélectionner. J'avais défini la textview dans la ligne xml comme "wrap-content" et cela signifiait que, s'il n'y avait qu'un ou deux caractères dans la TV, vous deviez en réalité en toucher un pour sélectionner la ligne. En passant à 'fill_parent', la télévision s'étend sur toute la ligne et facilite la sélection. Je pensais que cela pourrait aider les autres. Meilleurs voeux, Alan ... –

Questions connexes