Si le texte d'un Spinner
est trop long pour tenir sur une seule ligne, le texte n'est pas enveloppé mais coupé. Il s'agit uniquement le cas pour Niveau API >= 11 . Voici des captures d'écran d'Android 4.2.2 (à gauche) qui montre le mauvais comportement et Android 2.3.3 (à droite) où il apparaît comme prévu.
android:singleLine="false"
est simplement ignoré ici. Donc, comme tous les autres essais comme android:lines
, android:minLines
etc. Le site TextView
semble en quelque sorte être beaucoup plus large que la largeur de la fenêtre.
J'ai vu d'autres personnes ayant le même problème, mais personne n'a pu trouver de solution. Alors, est-ce un bug du système ? Je ne pense pas que cette incohérence entre les versions de l'OS puisse être voulue.
Veuillez noter :
Certaines réponses suggéraient des solutions relativement simples.
-
Rédiger un texte personnalisé
Adapter
et de remplacergetView()
ainsi quegetDropDownView()
. Ce n'est pas la solution, car à ce stade, le problème initial subsiste : à quoi doit ressembler la mise en page pour gérer correctement le retour à la ligne ? -
Emballage de la
TextView
de la vue déroulante dans un parentViewGroup
. Ne fonctionne pas avecandroid:layout_width="match_parent"
car la largeur du parent semble étrangement être illimitée. -
Donner une largeur fixe à la liste déroulante. Cela n'est pas adapté aux différentes largeurs de l'affichage de la liste déroulante.
Spinner
peut avoir. -
Et bien sûr, aucune solution ne consiste à insérer manuellement
\n
n'importe où dans le texte.
Reproduisez avec le code suivant :
UPDATE : J'ai également téléchargé ce projet en tant qu'exemple de projet sur GitHub : Télécharger
/res/values/arrays.xml :
<string-array name="items">
<item>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt.</item>
<item>At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est.</item>
</string-array>
/res/layout/spinner_item.xml :
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
style="?android:attr/spinnerDropDownItemStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="none"
android:minHeight="?android:attr/listPreferredItemHeight"
android:singleLine="false" />
Set Adapter
:
spinner.setAdapter(ArrayAdapter.createFromResource(this,
R.array.items,
R.layout.spinner_item));
1 votes
Vous devez créer une classe d'adaptateur personnalisée qui étend l'adaptateur de base, utiliser la méthode getDropDownView() et définir cet adaptateur sur le spinner, c'est tout.
2 votes
En regardant le code source d'Android, la version 2.3.3 de Spinner ( lien ) affiche un simple AlertDialog comme liste déroulante, alors que la version 4.1.1 ( lien ) affiche sa propre classe interne DropdownPopup (une sous-classe de ListPopupWindow). Une étude de cette différence est probablement un bon point de départ pour quiconque envisage de répondre à cette question.
0 votes
Essayez d'utiliser layout_weight=1, cela pourrait fonctionner
0 votes
Pourquoi ne pas le signaler à Android et voir ce qu'ils en disent ?
0 votes
Je pense que c'est le cas uniquement lorsque vous utilisez un thème holo.
0 votes
Voici le rapport de bogue sur b.Android.com