Nachdem ich die Android Design Support Library verwendet hatte TextInputLayout
, um ein schwebendes Etikett über einer EditText
Komponente zu platzieren, fragte ich mich, ob es eine Möglichkeit gibt, der Spinner
Komponente ein schwebendes Etikett hinzuzufügen (nicht unbedingt mithilfe der Design Library).
Damit meine ich so etwas wie ein TextView
über dem platziertes Spinner
(offensichtlich keine Animationen wie das TextInputLayout
), aber ich möchte, dass die Textgröße, Schriftart und Farbe mit der des TextInputLayout
schwebenden Etiketts des ' übereinstimmen .
Zum Beispiel würde es ungefähr so aussehen (siehe die Beschriftungen über dem Spinner
s):
Wie ich bereits erwähnt habe, ist es mein Hauptziel, eine Beschriftung über der Beschriftung zu haben Spinner
, genau wie in der TextInputLayout
- also wären Textgröße, Schriftart, Farbe und Abstände zwischen der Beschriftung und der Komponente gleich.
Auf der Google Design-Seite zu schwebenden Etikettentextfeldern gibt es ein Diagramm, in dem die Abmessungen des Etiketts relativ zur Komponente angezeigt werden. Es gibt jedoch keinen Hinweis auf die Farbe oder Größe des Etikettentextes:
Zusammenfassend frage ich also:
- Wenn es eine spezielle Komponente gibt, um das zu erreichen, was ich verlange, oder eine benutzerdefinierte Ansicht, die ich verwenden kann, welche wäre das und wie kann ich sie verwenden.
- Wenn nicht, wie groß ist die Größe, Farbe und Schriftart des schwebenden Etikettentextes, damit ich mit den im obigen Bild gezeigten Layoutabmessungen eine TextView
über meiner platzieren Spinner
kann.
BEARBEITEN:
Aus den Google Design-Richtlinien für Textfelder geht hervor , dass für schwebende Beschriftungen Folgendes gilt:
Hinweis und Eingabeschrift: Roboto Regular 16sp Beschriftungsschrift
: Roboto Regular 12sp Fliesenhöhe
: 72dp
Text oben und unten Textauffüllung: 16dp
Textfeldteilerauffüllung: 8dp
sowie die oben gezeigten Bilder.
Die Floating-Label-Schriftart lautet also: Roboto Regular 12sp . Sie können daher ein verwenden TextView
, um das Spinner
Etikett anzuzeigen, da mir keine benutzerdefinierten View
oder speziellen Komponenten bekannt sind, die Sie verwenden könnten.
Jedoch , es nach dem Versuch aus, ist es nicht ganz wie das Beispiel so gut aussieht in der Abbildung dargestellt. Eine benutzerdefinierte Ansicht mag dafür besser sein , da sie besser aussehen könnte, aber die obige Lösung ist nur eine Möglichkeit, etwas zu erreichen, das dem entspricht, was ich ursprünglich wollte.
quelle
<item name="android:textColor">?android:textColorHint</item>
Ihren Stil hinzufügen , um die gleiche Textfarbe in der benutzerdefinierten Beschriftung zu erhalten, die in TextInputLayout im nicht fokussierten Zustand verwendet wird.SpinnerLabel
anstatt ihnInputLabel
nur für Spinner zu verwenden.Ich habe einen Kern von mir gemacht, um das gleiche Problem zu lösen, das Sie haben.
Hör zu:
https://gist.github.com/rodrigohenriques/77398a81b5d01ac71c3b
Jetzt brauche ich keine Spinner mehr. Sie haben weiterhin einen schwebenden Beschriftungseffekt mit enthaltenen Animationen.
quelle
setInputType(InputType.TYPE_NULL);
deronDraw(canvas)
Methode hinzu, um Eingaben in den Edittext zu deaktivieren. Andernfalls wird z. B. durch langes Klicken ein Kontextmenü angezeigt, in dem der Benutzer Text einfügen kann.EditText
oderAppCompatEditText
, bitte!Ich habe dies erreicht, indem ich eine AutoCompleteTextView verwendet, die Tastatur deaktiviert und die Optionen bei Berührung angezeigt habe.
quelle
TextInputLayout
, um sicherzustellen, dass Sie genau das richtige Erscheinungsbild haben.R.layout.support_simple_spinner_dropdown_item
anstelle vonandroid.R.layout.simple_spinner_item
mTextView.setText(...)
, erhalten Sie nicht alle Werte vom Adapter in der Dropdown-adapter.getFilter().filter(null);
Ich habe eine zusammengesetzte
View
Komponente erstellt, die eine Beschriftung über dem anzeigtSpinner
. Der Text für das Etikett kann mithilfe von XML oder Java festgelegt werden.Die Komponente hat die Hauptmerkmale von a
Spinner
( nicht alle ) und sieht derTextInputLayout
Komponente ähnlich .Ich habe es a genannt
LabelledSpinner
und es ist als Teil meiner UsefulViews Android-Bibliothek auf GitHub unter der Apache 2.0-Lizenz verfügbar .Um es zu verwenden, fügen Sie die Bibliotheksabhängigkeit in Ihre
build.gradle
Datei ein:Beispiele für die Verwendung finden Sie im GitHub-Repository (sowohl eine Beispiel-App als auch eine Verwendungsanleitung).
quelle
Spinner
, ähnlich wie kleine Etiketten über denEditText
eingepackten KomponentenTextInputLayout
. Wie hast du dir das vorgestellt?Ich habe Rodrigos Lösung so modifiziert, dass sie einen Adapter verwendet, dh eher einen Standard-Spinner https://gist.github.com/smithaaron/d2acd57937d7a4201a79
quelle
Ich habe eine alternative Lösung, die das Verhalten von TextInputLayout und ein benutzerdefiniertes DialogFragment (AlertDialog) verwendet, um ein Popup-Fenster für den Drehfelddialog zu emulieren.
layout.xml:
Erstellen Sie einen benutzerdefinierten Spinner über DialogFragment (AlertDialog)
SpinnerFragment.java:
}}
Activity.java:
Ergebnis
Wenn Sie auf das TextInputLayout im Spinner-Stil klicken, wird ein Warndialogfeld mit Ihrer Auswahlliste ausgelöst. Sobald eine Auswahl ausgewählt wurde, wird der EditText mit Ihrer Auswahl gefüllt und die Beschriftung schwebt wie gewünscht.
quelle
android:focusable="false"
diese Ansicht für Benutzer, die Tastatur oder Sprache für die Interaktion mit der App verwenden, nicht unzugänglich?android:focusable="false"
ist jedoch, dass der Benutzer keine Eingabe eingeben kann, die nicht zur Auswahl gehört. Leider habe ich kein physisches Android-Handy, um das Verhalten zu testen und Sie zu informieren.Hier ist mein Trick,
Das Gute ist, dass alles so funktioniert, wie Sie es wollen.
Das Schlimme ist jedoch, dass die Layouthierarchie zunimmt und Sie mit der Funktionalität im Code umgehen müssen. Dies ist eine hässliche Lösung:
und Adapter für Spinner überschreiben, um ausgewählte Werte transparent zu machen
und nachdem Sie im Drehfeld ausgewählt haben, holen Sie sich einfach den ausgewählten Text und setzen Sie ihn auf EditText. Dies hat den gleichen Effekt wie die Animation
Wenn Sie Fragen haben, fragen Sie mich
quelle
Sie können dies erreichen:
Mit neuen Materialbibliotheksstilen wie diesen:
Für weitere Informationen: https://material.io/develop/android/components/menu/
quelle
Hier ist eine Bibliothek, die ich für den Floating Label Spinner rey5137 Material Library verwende
Zum späteren Nachschlagen finden Sie hier eine Liste einiger großartiger Bibliotheken. UI-Bibliotheken Kernbibliotheken
quelle
SpinnerCustom.java
layout_spinner_custom.xml
style.xml
quelle