wie man android spinner popupBackground ändert

7

Ich habe versucht, den Android-Spinner-Popup-Fensterhintergrund zu ändern, indem ich den android: popupBackground setzte, aber es hatte keinen Effekt. Kann ich es irgendwie ändern?

%Vor%     
Wenbo 19.01.2012, 08:18
quelle

2 Antworten

15

Ich nehme an, dass Sie versuchen, den "äußeren" Hintergrund eines Spinner Popups zu ändern, nicht den Hintergrund von Spinner "Pupup Items". Ich nehme auch an, dass Sie unter Popup einen Spinner-Dialog-Modus verstehen, bei dem im Gegensatz zum neuen Dropdown-Modus ein schwebendes Dialogfenster über Ihrer Aktivität angezeigt wird.

Strategie

Für einen sauberen, nachhaltigen Ansatz, der sich über mehrere Android-Plattformen hinweg gut auswirkt und den Bedarf an Redundanz in der App verringert, ist es meiner Meinung nach wichtig zu verstehen, was uns die offiziellen Dokumente nicht sagen. Also folge mir auf eine kurze Reise.

Das Schwierige an Spinner ist, dass ein Adapter verwendet wird, um sie mit Daten zu verbinden. Während es relativ einfach ist, die Haken zum Ändern des Aussehens von android.R.layout.simple_spinner_item und seinen Freunden zu identifizieren, bestimmen diese nur den Stil des aktuell angezeigten Gegenstands des Spinner sowie jedes einzelne Popup-Gegenstand. Aber es ist der Adapter , der für das Erstellen der ListView und anderer Widgets zuständig ist, die diese ListView umrahmen.

Diese Komplexität ist wahrscheinlich der Grund, warum Android einige Attribute eingeführt hat, die "für" den Spinner direkt angegeben werden können, obwohl sie dann auf die Kinder des Spnner angewendet werden, wie Android: PopupBackground . Dies ist nicht unbedingt ein sauberer Ansatz, sondern ein begrenzter Satz von Komfortfunktionen. Bezüglich popupBackground, btw, wurde dies in API Level 1 eingeführt, aber Spinner respektieren es nur in spinnerMode = dropdown , was in API Level 11 eingeführt wurde. Das ist der Grund, warum du nie benachrichtigt werden wirst nutze es falsch.

Ältere Android-Versionen (z. B. 2.2)

ListView

Wenn Sie wissen, dass der Adapter eine ListView erstellt, ist es keine schlechte Idee, die ListView-Darstellung in einem Thema zu ändern. Es gibt also einen einzigen Platz für die Designänderung und die Styling einfach, so:

%Vor%

AlertDialog

Leider gibt es mehr Arbeit. Da Android: Prompt verwendet werden kann, um eine Überschrift für das Popup zu erstellen, besteht das Popup wirklich aus mehr als nur der ListView.

Android verwendet einen AlertDialog

Aktuelle Android-Versionen (z. B. 4.2)

Nun, da die AlertDialogs formatiert sind, müssen wir noch die Tatsache berücksichtigen, dass neuere Android-Versionen keine AlertDialogs mehr für Spinner-Dialoge verwenden. Das tut nicht weh, denn für diese sollte der AlertDialog-Stil sowieso beibehalten werden. Es bedeutet nur, dass wir das neue Popup ebenfalls stylen müssen.

Erstellen Sie zu diesem Zweck versionsspezifische XML-Themendateien, um die zusätzlichen Stile in Ihr benutzerdefiniertes Design zu übernehmen, und stellen Sie versionsspezifische XML-Formatdateien bereit.

Lust, es selbst zu versuchen, hier anzufangen?

    
class stacker 07.12.2012, 12:44
quelle
9

android:popupBackground ist nur gültig, wenn android:spinnerMode = "dropdown" verwendet wird. Das ist wahrscheinlich der Grund, warum es in Ihrem Code keinen Effekt gab. Sie müssen diesem Spinner mitteilen, in welchem ​​Modus sich XML befindet.

%Vor%

Links

Entalpi 08.11.2012 07:52
quelle