2012-07-06 4 views
8

Ich kann getX() finden, und getY() beide einen float zurückgeben. Aber wie erkenne ich, ob die Koordinaten eines TouchEvent e.get(), e.getY() innerhalb der Grenzen des EditText-Oberflächenelements liegen? Ich bemerke getX() und getY() sind Floats aber getHeight() und getWidth() sind int. Nicht mit Vergleichen helfen ...Wie erkenne ich, ob ein Berührungsereignis in einem EditText gelandet ist?

+0

Was haben Sie versucht? Ich empfehle ** sehr ** das Lesen der [OnTouchListener-Dokumentation] (http://developer.android.com/reference/android/view/View.OnTouchListener.html) ... – Sam

+0

hat meinen Beitrag bearbeitet. – Ixx

+0

Was ich versucht habe, ist etwas namens "Denken Sie, bevor Sie Code" –

Antwort

28

Was genau möchten Sie tun? Wenn Sie nur feststellen möchten, ob Ihr EditText berührt wird, fügen Sie dem EditText ... oder OnClickListener einen OnTouchListener hinzu.

Edit: Wenn Sie außerhalb erfassen möchten, können Sie Berührungsereignis in der enthaltenden Ansicht, erkennen und dann, da haben Sie Ihre EditText Ansicht:

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

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

Oder Sie fügen eine Note Zuhörer sowohl auf die EditText und der Container und gibt false in dem EditText zurück, auf diese Weise wird es abgefangen und nicht an den Eltern weitergeleitet. Alle Berührungen, die Sie im Listener des Parents feststellen, gehören nicht zum EditText.

+0

Das Gegenteil davon. Erkennen, ob ein Berührungsereignis außerhalb des EditText aufgetreten ist. –

+0

Aber bedeutet "innerhalb" nicht "drinnen", oder ist mein Englisch falsch? – Ixx

+0

Ok. Ich denke das ist grundsätzlich richtig. Aber ich möchte klarstellen, was der Container erhalten wird. Das Debugging scheint darauf hinzuweisen, dass die enthaltenen Elemente wie EditText ihre Berührungsereignisse verschlingen und nicht in den Container gelangen. Jedes andere Element der Aktivität, wie Checkboxen usw., verschlingt auch das Touch-Event, das in seiner Zone landet. Vielleicht ist dies eine Einstellung im Manifest, um einem enthaltenen Element mitzuteilen, dass es seine Berührungsereignisse sprudeln soll, oder müssten Sie eine Methode überschreiben, um dies zu tun? –

Verwandte Themen