Gibt es unter Android eine Möglichkeit, das Verhalten eines Spinner beim langen Drücken zu deaktivieren?

8

Das Standard-Spinner-Verhalten ist, dass wenn es "geschlossen" ist, langes Drücken auf es "öffnet" und zeigt Ihnen die Dropdown-Ansicht. Ich finde, dass dieses Verhalten für den Benutzer möglicherweise sehr problematisch ist. Zum Beispiel, wenn sie versuchen, etwas auf dem Bildschirm zu scrollen, und zufällig einen Punkt mit einem Drehknopf "greifen", dann wird, anstatt zu scrollen, die Dropdown-Ansicht nach einer Sekunde geöffnet, und der Benutzer ist es im Grunde mit dem Finger auf eine der Dropdown-Optionen verlassen (die sie jetzt versehentlich drücken können).

Also möchte ich das lange Drücken-Verhalten deaktivieren und den Spinner "öffnen" lassen, wenn nur angeklickt und nicht lange gedrückt wird. Ist das möglich?

    
user496854 13.01.2015, 13:25
quelle

4 Antworten

2

Also, ich habe einen relativ einfachen Weg gefunden, dies zu tun, obwohl es nicht sehr elegant ist. Im Grunde habe ich eine transparente Overlay-Ansicht oben auf dem Drehfeld erstellt und einen OnClickListener festgelegt, der nur den Klick eines Drehers auslöst.

XML:

%Vor%

Java:

%Vor%     
user496854 14.01.2015, 03:40
quelle
3

Wenn Sie nur das standardmäßige Klickverhalten wiederherstellen müssen, ist dies eine einfachere und kompaktere Version von Jordi's Antwort :

%Vor%

Weitere Gedanken

Dieses Verhalten hat mich auch gestört. Nach der Untersuchung scheint es einen Namen zu haben: ziehe zum Öffnen . Sie können sehen, wie es in der Quelle von AppCompatSpinner#onTouchEvent() Methode.

Einige Probleme, die ich mit diesem erzwungenen Verhalten sehe (und der Grund, warum manche Leute es deaktivieren wollen):

  1. Es ermöglicht dem Benutzer, deaktivierte Werte im Spinner auszuwählen. Durch langes Drücken, Ziehen und Loslassen können Sie Werte auswählen, die bei einer normalen Interaktion (Click-to-open + click-to-select)
  2. nicht auswählbar wären
  3. Als Konsequenz von # 1 kann es den Espresso-Test auch sehr leicht zum Scheitern bringen. In der Tat ist die Dauer eines Klicks in Espresso ziemlich instabil und ein Tipp kann schnell zu einer langen Interaktion zwischen Drücken und Auswählen werden.
  4. Schließlich ist das größte Problem hier, dass es kein method / XML-Attribut gibt, um das "Drag-to-open" -Verhalten zu deaktivieren ...

Lass es uns reparieren lassen!

Ich habe ein entsprechendes Ticket auf dem AOSP-Problemverfolger geöffnet: # 228953 . Fühlen Sie sich frei, ihm zu folgen oder zu kommentieren, wenn ich etwas verpasst habe.

    
David Ferrand 28.11.2016 15:58
quelle
0

Haben Sie versucht, android: longClickable="false" in xml noch?

oder versuchen Sie etwas wie folgt:

%Vor%     
Jordi Sipkens 13.01.2015 14:02
quelle
0

Etwas spät, aber vielleicht immer noch nützlich für jemanden:

Das Festlegen eines OnLongClickListener , das true in onLongClick zurückgibt, verhindert ein (unbeabsichtigtes) Öffnen von Spinner , da es so funktioniert, als ob der Callback den langen Klick verbraucht hätte, wie in Dokumentation .

%Vor%

Der einzige Nachteil ist, dass der Spinner nach einem langen Klick immer noch die onTouch Animation hat.

    
daco 21.02.2018 12:00
quelle

Tags und Links