Spinner nicht umbrechen von text — ist das ein Android-bug?
Wenn der text einer Spinner
Artikel ist zu lang und passt nicht in eine Zeile, der text wird nicht umgebrochen, sondern abgeschnitten. Dies ist nur Fall für API-Ebene >= 11. Hier sind screenshots der Android - 4.2.2 (Links) zeigt das falsche Verhalten und Android 2.3.3 (rechts), wo es aussieht wie erwartet.
android:singleLine="false"
wird einfach ignoriert hier. So wie alle anderen versucht, wie android:lines
android:minLines
usw. Die TextView
irgendwie scheint zu sein, viel breiter als die Fensterbreite.
Ich sah, dass andere Leute das gleiche problem, aber keiner konnte eine Lösung finden. So, ist das ein system Fehler? Ich glaube nicht, dass diese Inkonsistenz zwischen den OS-Versionen gemeint sein kann.
Bitte beachten Sie:
Gab es einige Antworten, die darauf hindeutet, relativ einfache Lösungen.
-
Schreiben einer benutzerdefinierten
Adapter
und überschreibengetView()
sowiegetDropDownView()
. Dies ist nicht die Lösung hier, weil an dieser Stelle, es ist immer noch das ursprüngliche problem: Wie wird das layout Aussehen zu handhaben, die richtige Zeile umbrechen? -
Einwickeln der
TextView
von der drop-down-Sicht in eine übergeordneteViewGroup
. Funktioniert nicht mitandroid:layout_width="match_parent"
da die Breite des übergeordneten seltsam zu sein scheint unbegrenzt. -
Angabe der drop-down-anzeigen eine Feste Breite. Dies ist nicht geeignet, mit den verschiedenen breiten der
Spinner
haben kann. -
- Und natürlich keine Lösung ist manuell einfügen
\n
s irgendwo in den text.
Reproduzieren mit dem folgenden code:
UPDATE: ich auch hochgeladen, dies als ein Beispiel-Projekt auf GitHub: Download
/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));
InformationsquelleAutor der Frage Matthias Robbers | 2013-01-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
In holo theme spinner standardmäßig verwendet dropdown-Modus. Und alles bewegt sich mit überschreiben des Standard-styles nur bewegen, um die Umstellung spinner-mode dialog-Modus, der erfolgreich wraps mehrzeiliger text, wie im api-11. Stattdessen können Sie erstellen, die spinner mit
new Spinner(context, Spinner.MODE_DIALOG)
oder in xml:android:spinnerMode="dialog"
. Aber es ist nicht das problem, denn es ist dialog, nicht dropdown.Ich habe eine andere Lösung gefunden für dieses Problem: Überschreiben
getDropDownView
Methode inArrayAdapter
und setzensetSingleLine(false)
im post-Methode der view. Also, wenn Ansicht vollständig erstellt, es bricht den text um die entsprechenden Zeilen.UPDATE:
Und hier ist eine weitere Antwort.
Manuell wickeln listview in "PopupWindow" und zeigen Sie es unter TextView auf klicken Sie auf und verstecken Sie auf den Listeneintrag klicken.
Einfache Implementierung, nur um zu zeigen Idee:
InformationsquelleAutor der Antwort Kolchuga
Ich habe dieses problem gelöst durch Umschalten in den dialog-Stil-spinner:
InformationsquelleAutor der Antwort cVoronin
Nur eine Kombination der Lösungen hier für mich gearbeitet (getestet auf Android 5.1 auch) :
spinner_item.xml
code
InformationsquelleAutor der Antwort android developer
Erreichung multi-line-drop-down-Elemente auf einem
Spinner
während der Verwendung einerHolo
Thema nicht möglich ist, von dem, was ich versucht habe.Einen workaround Lösung ist:
Spinner
dass Erben nicht vonHolo
. Dies ermöglicht multi-line-drop-down-Elemente.Holo
-Themen.Diese produziert (mit geschlossenen und offenen Zustand):
Details der Implementierung:
Gibt es keine Möglichkeit zu Erben
Holo
Thema auf derSpinner
und zeigen Sie mehrere Zeilen in derSpinner
drop-down-Element so weit wie ich kann sagen, auch wenn wir die drop-down-ElementTextView
singleLine
Attributfalse
und bereitstellen einer benutzerdefinierten layout. Ich habe auch versucht zu halten dieHolo
Stil, aber die änderung derStile Attribute (Beispiel für die Verwendung dieser Attribute hier), aber ich konnte es nicht machen, produzieren eine multi-line-Ergebnis.
Aber wenn wir überschreiben Sie den Stil der
Spinner
und nicht ErbenspinnerStyle
ausHolo
:dann die drop-down-Element unterstützen zeigen mehrere Zeilen. Aber jetzt haben wir verloren, die
Holo
Thema auf derSpinner
und geschlossenen Zustand aussieht wie eineTextView
keinSpinner
mit kein Pfeil oder visuellen Hinweis, es ist einSpinner
. Wenn wir stattdessen aufspinnerStyle
Eltern:parent="android:style/Widget.Spinner
:den
Spinner
geschlossenen Zustand zeigt der Pfeil wird aber im Stil wie die graue pre-HoloSpinner
das aussieht fehl am Platz in einemHolo
app.Also, eine mögliche Lösung ist dann:
spinnerStyle
und verwenden Sie nichtHolo
für Eltern. Das aktivieren von multi-line-text in der DropDown-Elemente.Spinner
hintergrund zu schauen, wie es erbt dieHolo
Thema.Hier ein Beispiel:
Erstellen Sie eine einfache Aktivität:
Aktivität layout:
Stile:
in den drawable-Ordner legen spinner_background_holo_light:
und diese drawables in Ihrem
drawables-hdpi
Ordner:spinner_default_holo_light.9.png
spinner_disabled_holo_light.9.png
spinner_focused_holo_light.9.png
spinner_pressed_holo_light.9.png
Dieser erzeugt ein Drehfeld mit
Holo
-Thema geschlossen-Zustand und multi-line-Positionen, wie dargestellt in den screenshots oben.Dem drop-down-Elemente in diesem Beispiel sind nicht
Holo
-Themen, aber vielleicht ist es ein annehmbarer Kompromiss, wenn multi-line-Anzeige der drop-down-Elemente, die wirklich wichtig ist.In diesem Beispiel
android:minSdkVersion
war14
undandroid:targetSdkVersion
zu17
im Manifest.Holo
Grafik und diespinner_background_holo_light.xml
- code kommen aus HoloEverywhere Copyright (c) 2012 Christophe Versieux, Sergey Shatunov. Siehe verlinkten github-Projekt für Lizenz details.InformationsquelleAutor der Antwort Gunnar Karlsson
Hinzufügen eines LinearLayout rund um die TextView erlaubt den text zu wickeln richtig.
Layout - (common_domainreferencemodel_spinner_item.xml):
Adapter:
InformationsquelleAutor der Antwort Mike Schall
Stand ich vor dem gleichen problem. Ich will sehen 2 Zeilen in der dropdown-Liste der spinner, aber alle Lösungen die ich gefunden habe, scheinen mir unangemessen zu beheben, so einfaches problem. Ich untersuche Spinner-source-code und ich fand, Wenn wir Brauch .xml - mit dem Attribut android:singleLine="false"
und Standard ArrayAdapter, der folgende code ausgeführt ListPopupWindow jedesmal, wenn
und das ist, warum sehen wir nur eine string-Zeile pro Zeile Liste, es 's tatsächlich scrollen.
Zur Lösung derartiger problem unserer Sicht sollte nicht Instanz von TextView, legen Sie einfach Ihre TextView innerhalb FrameLayout oder LinearLayout.
und
Diese Lösung funktioniert in beiden spinner-Modus: MODE_DROPDOWN und MODE_DROPDOWN.Hoffe es hilft dir!
InformationsquelleAutor der Antwort girlOnSledge
Ich denke, es ist ein bug in android. Sie könnten versuchen, diese. Entfernen Sie die Leerzeichen aus dem text und dann zeigt es würde funktionieren. Wenn die Länge der textview ist <, dass sich der string ist, wird es ignoriert alle Zeichen nach dem Leerzeichen.
Für ein work-around, Sie könnten versuchen, diese :
fügen Sie eine Datei in res/layout Ordner mit dem Namen multiline_spinner_dropdown_item.xml mit den Beispiel-code:
und beim anlegen der spinner schaffen es, aus diesem layout.
Etwas wie :
Grundsätzlich, kopieren Sie den android.R.layout.simple_spinner_dropdown_item layout in das Projekt und ändern Sie die layout-Einstellung "singleLine" - Attribut auf false in CheckedTextView.
InformationsquelleAutor der Antwort lokoko
Lesen diese Antwort: textview casting-Fehler:- android.- widget.LinearLayout kann nicht gewirkt werden, um android.- widget.TextView und dieses Thema, ich konnte dieses problem lösen: Wir brauchen ein LinearLayout, das einwickeln der TextView (Die spinner-text) um den text raus aus dem Bildschirm, aber wir haben einige Probleme zu lösen. Um zu starten, erstellen das layout (ich nannte es spinner_dd_item.xml):
Der nächste Schritt ist die Schaffung eines ArrayAdapter Instanz, um es an die spinner:
Vergessen Sie nicht hinzufügen, wird der name des Layouts und der TextView id auf der ArrayAdapter, weil wir das LinearLayout, und wir müssen Sie die TextView, und überschreiben getDropDownView, um die Ansicht, die zeigt die Daten an der angegebenen position in der Daten-set. Jetzt können wir sehen, die spinner arbeiten schön auf neueren und älteren android-Versionen
InformationsquelleAutor der Antwort Jaco
ich fand es einfach, dass android hat vorhandenen Stil für diesen Fall
hoffe, dass es gelöst problem.
InformationsquelleAutor der Antwort Fajar Rukmo
Ich hatte das gleiche problem und eine Lösung gefunden.
Ich wollte den text zu umbrechen, in der ersten Anzeige und in der dropdown-Ansicht.
Den text war die Verpackung in der ersten Anzeige und für die dropdown musste ich eine andere Lösung gefunden die Empfehlung der Verwendung einer benutzerdefinierten Ansicht eines linearen layout mit fester Breite umschließt eine textview. Diese aus der dropdown-Liste der spinner korrekt Aussehen, als auch, dass von der ersten Auswahl. Jedoch, dies verursacht ein großes problem bei älteren Geräten.
Die anfängliche Anzeige würde nicht aktualisiert und der text nahm über ein gestapeltes Aussehen, wenn ich versuchte, etwas anderes auszuwählen. und da es gestapelt nach unten, das hinzufügen eines hintergrund-hat nicht geholfen.
Als es dreht out Adapter haben eine Methode namens setDropDownViewResource() können Sie eine andere Ansicht für die dropdown-als das, was angezeigt wird, in der spinner ' s erste Auswahl.
in diesem Beispiel die simple_list_item ist die Standardeinstellung geliefert, die von android und my_simple_list_item ist
Nun der text umgebrochen innerhalb der dropdown-Blick auf den spinner UND die Spinner die angezeigte Auswahl.
InformationsquelleAutor der Antwort Michael Alan Huff
Nur wickeln
TextView
mitLinearLayout
:InformationsquelleAutor der Antwort mixel
InformationsquelleAutor der Antwort user5723352
Hier ist was ich getan habe, damit es funktioniert:
- Und dies ist der Inhalt von "simple_dropdown_item_multiline":
InformationsquelleAutor der Antwort Marco C.
Ich dieses Problem behoben durch hinzufügen \n (neue Zeile) im text (so einfach).
Sieht wie folgt aus:
- Und dies ist das layout, das die spinner verwendet wie die Zeile:
InformationsquelleAutor der Antwort Goran Horia Mihail