Android-Taste - Wie fokussierbar auf "true" setzen und trotzdem onClick-Listener beim ersten Klick akzeptieren?

8

AKTUALISIEREN

Ich habe das Problem mit dem Klicken gelöst, indem ich die zwei fokussierbaren Zeilen aus dem Schaltflächenstil entfernt habe und den Ereignishandler onClick verwendet habe, um requestFocusFromTouch();

aufzurufen

Leider bleibt mir ein Problem, dass requestFocusFromTouch () die falsche Schaltfläche fokussiert. Es fokussiert immer die erste Schaltfläche und nicht die Schaltfläche, auf die ich die Methode anrufe. Ist das ein Android Bug oder erwartetes Verhalten und was kann ich für eine Arbeit tun?

Der Code sieht nun für das onClick-Ereignis wie folgt aus

%Vor%

ENDE DER AKTUALISIERUNG

Ich habe eine Android-Taste, die den folgenden Stil hat

%Vor%

Ich habe einen On-Click-Listener, der so aussieht

%Vor%

Ich habe ein Bild auf der Schaltfläche und der Selektor sieht so aus

%Vor%

Das Layout, das die Schaltfläche und die Schaltfläche verwendet, sieht so aus

%Vor%

Es gibt andere Schaltflächen und dieses Layout fungiert als obere Menüleiste, die in jedem Layout enthalten ist.

Das onClick-Ereignis für die Schaltfläche wird aufgrund der fokussierbaren Linien nur bei einem zweiten Klick auf die Schaltfläche ausgelöst.

%Vor%

Der erste Klick setzt den Fokus auf die Schaltfläche und der zweite Klick löst den onClick-Ereignis-Listener aus Ich muss die beiden zusammen kombinieren, so dass der erste Klick den Fokus auf AND setzt und den OnClick-Ereignis-Listener auslöst. Kann das gemacht werden?

Wenn ich die zwei fokussierbaren Zeilen entferne, verhalten sich die Tasten normal, aber ich möchte zeigen, dass die Taste fokussiert ist und ich möchte den Lauftext in der Taste, die <item name="android:ellipsize">marquee</item> mir gibt

Irgendwelche Ideen sehr geschätzt

    
jamesc 07.08.2011, 04:27
quelle

3 Antworten

3

Möglicherweise müssen Sie einen OnFocusChangeListener und dann prüfen, ob das Fokus-Ereignis passiert ist, als der Bildschirm sich im Touch-Modus befand: Wenn dies der Fall war, war es ein Benutzer-Klick, ansonsten vom Trackball / Trackpad.

    
Femi 07.08.2011, 06:30
quelle
4

Das können Sie in onClick(View v) :

tun %Vor%

Also, v bekommt den Fokus und du kannst etwas in onClick() bis setFocusableInTouchMode(false) machen, es kann onClick bei der ersten Berührung akzeptieren.

    
puff 30.10.2015 10:08
quelle
0

Sie können onTouch verwenden. Auf diese Weise können Sie alle Klicks verarbeiten, ohne OnFocusChangeListener festlegen zu müssen.

    
WWJD 28.03.2018 11:11
quelle

Tags und Links