8

Ich versuche, Spinner, die auf allen Versionen von Android die gleichen aussehen zurück zu Froyo. Zu diesem Zweck verwende ich HoloEverywhere. Einige der Spinner Items sind mehr als eine Zeile, und ich möchte, dass sie umbrochen wird.Spinner mit mehrzeiligen Objekten überlappt ausgewählte Artikel auf Froyo

Mithilfe des Standardlayouts android.R.layout.simple_spinner_dropdown_item oder HoloEverywhere's drop-in replacement for it wird der Text in Ellipse gebracht, anstatt ihn zu umbrechen.

das Layout des HoloEverywhere Nimmt man als Ausgangspunkt für einen benutzerdefinierten Layout mit singleLine Set false, ellipsize Set none und layout_height Satz wrap_content nicht hilft, wird der Text immer noch abgeschnitten.

ich kann den Text bekommt richtig in der Dropdown-Liste zu wickeln, indem die TextView in einem LinearLayout Einwickeln, sondern auf Froyo Geräte diese vermasselt die Anzeige der ausgewählt Artikel auf: Every time you can't get a uniform look back to froyo jake wharton sheds a single tear.

Diese Methode funktioniert gut auf neueren Geräten. Die Dropdown-Element-Layouts sind auf allen Geräten in Ordnung. Aber Froyo macht diesen seltsamen Text überlappend, wenn ich ein benutzerdefiniertes Dropdown-Element-Layout verwende. Jede Auswahl wird nur auf der letzten gestapelt.

Diese Frage: Spinner does not wrap text -- is this an Android bug? über Textumbruch in Spinner legt nahe, dass nur so, ohne es neu zu erstellen das Styling von Grunde auf tun vererben, aber das klingt verrückt und anfällig für Probleme.

my_simple_list_item_1.xml:

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="300dp" 
    android:layout_height="wrap_content" > 

    <TextView 
    android:id="@+id/android:text1" 
    android:layout_width="wrap_content" 
    android:layout_height="50dp" 
    android:ellipsize="marquee" 
    android:layout_gravity="center_vertical" 
    android:singleLine="false"/> 
</LinearLayout> 

Java:

import org.holoeverywhere.widget.Spinner; 

    spinner1.setAdapter(ArrayAdapter.createFromResource(this, 
      R.array.array_of_strings, R.layout.my_simple_list_item_1)); 
+0

Beachten Sie, dass zwei Stildateien beteiligt sind, eine für die Dropdown-Listenelemente und eine für das ausgewählte Listenelement (das wie das überlappende Element klingt). Setzen Sie den ausgewählten Stil explizit? – blahdiblah

+0

Haben Sie auch versucht, dem Layout einen Hintergrund zu geben, sodass Sie selbst bei Überlappung nicht sehen können, was darunter liegt? – blahdiblah

+0

Hey da, bladiblah, danke für die Antwort. Ich glaube nicht, dass ich den ausgewählten Stil explizit festlegen werde. Aber um zu sehen, was passiert ist, habe ich einen Hintergrund gegeben. Ich hoffte wirklich, dass das funktionieren würde, aber leider stapelte es sich in die falsche Richtung. Wenn ich einen Hintergrund auf die Textansicht stelle, würde ich immer nur das erste auswählbare Element im Spinner (oder das erste Element im Array) sehen. Es schien, als wenn das neue Material unter die alten Sachen stapelte, also fügte ich nur einen Hintergrund hinzu, um diese erste Auswahl zu sehen. –

Antwort

8

fand ich eine Lösung. Der Text wurde umgebrochen, da die ursprüngliche Darstellung der Spinner nur Textansichten verarbeiten konnte, und ich hatte eine andere Lösung gefunden, die die Verwendung eines linearen Layouts empfahl. Dies ließ das Dropdown des Spinner korrekt aussehen. Wie sich herausstellt, haben Adapter eine Ressource mit dem Namen setDropDownViewResource(), mit der Sie eine andere Ansicht für das Dropdown-Menü festlegen können als in der Auswahl des Drehfelds angezeigt wird.

import org.holoeverywhere.widget.Spinner; 

ArrayAdapter adapter1 = ArrayAdapter.createFromResource(this,R.array.array_of_strings,R.layout.simple_list_item_1); 
adapter1.setDropDownViewResource(R.layout.my_simple_list_item_1); 
spQ1.setAdapter(adapter1); 

in diesem Beispiel ist die simple_list_item die Standardansicht von Android und mY_simple_list_item geliefert wird

<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="300dp" 
android:layout_height="wrap_content" > 

<TextView 
    android:id="@+id/android:text1" 
    android:layout_width="wrap_content" 
    android:layout_height="50dp" 
    android:ellipsize="marquee" 
    android:layout_gravity="center_vertical" 
    android:singleLine="false"/> 

</LinearLayout> 

nun der Text in der Auswahl angezeigt Drop-Down-Ansicht des Spinners und in den Spinnereien wickelt.