Autore Topic: Evitare di catturare il click tra Layout  (Letto 563 volte)

Offline noodles

  • Utente junior
  • **
  • Post: 130
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Google Nexus One
  • Sistema operativo:
    Mac OS X Snow Leopard
Evitare di catturare il click tra Layout
« il: 29 Luglio 2011, 15:55:41 CEST »
0
C'è una cosa strana che non capisco e avrei bisogno di un'aiuto.

Ho un FrameLayout con dentro due LinearLayout sovrapposti, di fatto occupano la stessa superficie.

Vorre evitare che il LinearLayout più in alto catturi l'evento di click e che venga "passato" a quello sottostante. Ponendo la visibilità di GONE la cosa funzione, ma per motivi che non vi sto a spiegare posso solo limitarmi a metterlo ad INVISIBLE.

Ho pensato di gestire il click io con onTouchListener(), ma c'è una via più facile?

Offline Gigiuz

  • Utente normale
  • ***
  • Post: 187
  • Respect: +23
    • Google+
    • gigiuzzo81
    • Gigiuz81
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy Note III
  • Play Store ID:
    GGXSoft
  • Sistema operativo:
    Windows 7 64bit, OS X (virtualized), Ubuntu
Re:Evitare di catturare il click tra Layout
« Risposta #1 il: 29 Luglio 2011, 17:49:52 CEST »
0
[...]

Ho pensato di gestire il click io con onTouchListener(), ma c'è una via più facile?

Sinceramente è l'unico modo che mi viene in mente: riscrivi l'onTouchListener() con un'implementazione vuota e ritornando "true" per indicare che l'evento si esaurisce lì, ma comunque dovrebbe poter essere catturato dalle altre view contenute...
Hai bisogno di implementare un sistema di "codici seriali di sblocco" nella tua applicazione? Dai un'occhiata alla mia libreria: RemoteUnlocker

Offline noodles

  • Utente junior
  • **
  • Post: 130
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Google Nexus One
  • Sistema operativo:
    Mac OS X Snow Leopard
Re:Evitare di catturare il click tra Layout
« Risposta #2 il: 29 Luglio 2011, 17:56:18 CEST »
0
a me non viene altro in mente. Pensavo che disabilitando il layout questo bastasse ho provato setEnabled(false) e setClickable(false) ma nada... l'evento viene consumato lo stesso.

Offline noodles

  • Utente junior
  • **
  • Post: 130
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Google Nexus One
  • Sistema operativo:
    Mac OS X Snow Leopard
Re:Evitare di catturare il click tra Layout
« Risposta #3 il: 30 Luglio 2011, 18:37:54 CEST »
0
Sinceramente è l'unico modo che mi viene in mente: riscrivi l'onTouchListener() con un'implementazione vuota e ritornando "true" per indicare che l'evento si esaurisce lì, ma comunque dovrebbe poter essere catturato dalle altre view contenute...

allora ho fatto un po' di prove e il risultato è questo:

Il mio layout è così:
+FrameLayout
      +ScrollView
            + LinearLayout 1
                + TextView
                + Button
      +LinearLayout 2

Tutte le ViewGroup sono fill_parent ed essendo dentro ad un FrameLayout sono sovrapposte. In praitica il LL2 copre tutto il resto.

Cosa succede?
Il LL2 con un'animazione va via, per problemi di layout non posso metterla a GONE altrimenti avrei risolto :(
A questo punto si vede la ScrollView con dentro il suo testo e un bottono all'interno del suo LinearLayout (la scrollview necessita di un solo child).

A questo punto perchè la scrollview si muova devo catturare i TouchEvent dell LL2 e passarli sotto... come?
Codice (Java): [Seleziona]
linear2.setOnTouchListener(new OnTouchListener(){

                        @Override
                        public boolean onTouch(View v, MotionEvent event) {
                                //se non è avvenuta l'animazione
                                if(......)
                                        return false;
                                else   //altrimenti dispatcho alla scrollview
                                        scrollview.dispatchTouchEvent(event);
                                return true;
                        }
                       
                });


Se faccio i dovuti controlli riesco a vedere che la scrollview scrolla e riceve gli eventi. Il LL1 interno alla scroll view riceve l'evento a sua volta, ma il button NO.

E qui il punto... se tocco la porzione di schermo dove è visualizzato il button l'evento viene propagato alla ScrollView e al LinearLayout1 e basta. MI aspettavo invece che, essendo un child, catturase eventuali click... mi sto sbagliando?


« Ultima modifica: 30 Luglio 2011, 19:22:17 CEST da noodles »

Offline noodles

  • Utente junior
  • **
  • Post: 130
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Google Nexus One
  • Sistema operativo:
    Mac OS X Snow Leopard
Re:Evitare di catturare il click tra Layout
« Risposta #4 il: 05 Agosto 2011, 21:39:18 CEST »
0
alla fine ho dovuto modificare le view a runtime in modo da poter mettere a GONE quelle non necessarie e gestire tutti i touch anche su più livelli.