2012-07-06 10 views
8

Posso trovare getX(), e getY() restituiscono entrambi un float. Ma come faccio a sapere se le coordinate di un TouchEvent e.get(), e.getY() sono entro i limiti dell'elemento UI EditText? Notiamo getX() e getY() sono float ma getHeight() e getWidth() sono int. Non sarà di aiuto per i confronti ...Come posso rilevare se un evento tattile è atterrato in un EditText?

+0

Cosa hai provato? Io ** consiglio vivamente di leggere la [documentazione di OnTouchListener] (http://developer.android.com/reference/android/view/View.OnTouchListener.html) ... – Sam

+0

Modificato il mio post. – Ixx

+0

Quello che ho provato è qualcosa chiamato "pensa prima di codificare" –

risposta

28

Che cosa esattamente vuoi fare? Se vuoi solo rilevare se il tuo EditText è stato toccato, aggiungi un OnTouchListener a EditText ... o anche a OnClickListener.

Edit: Se si vuole rilevare al di fuori, è possibile rilevare evento di tocco nella vista che contiene, e poi, dato che avete la vostra vista EditText:

Rect editTextRect = new Rect(); 
myEditText.getHitRect(editTextRect); 

if (!editTextRect.contains((int)event.getX(), (int)event.getY())) { 
    Log.d("test", "touch not inside myEditText"); 
} 

O si aggiunge un tocco ascoltatore sia al EditText e il contenitore, e restituisce falso in quello di EditText, in questo modo verrà intercettato e non inoltrato al genitore. Quindi, tutti i tocchi che si rilevano nell'ascoltatore del genitore, non apparterranno a EditText.

+0

L'inverso di quello. Rileva se si è verificato un evento di tocco all'esterno di EditText. –

+0

Ma "dentro" non significa "dentro", o il mio inglese è sbagliato? – Ixx

+0

Ok. Penso che sia fondamentalmente giusto. Ma vorrei chiarimenti su ciò che il container riceverà. Il debug sembra indicare che gli elementi contenuti come EditText divorano i loro eventi tattili e non si presentano come bolle al contenitore. Ogni altro elemento dell'attività come le caselle di controllo ecc. Inghiotte (non inghiottire) l'evento tattile che atterra nella loro zona. Forse la loro è qualche impostazione nel manifest per dire ad un elemento contenuto di bombardare i suoi eventi touch o sarebbe necessario sovrascrivere un metodo per farlo? –

Problemi correlati