2012-07-06 99 views
8

我可以找到getX()和getY()都返回一個浮點數。但是,如何檢測TouchEvent e.get(),e.​​getY()的座標是否在EditText UI元素的邊界內?我注意到getX()和getY()是float,但getHeight()和getWidth()是int。不會幫助比較...如何檢測觸摸事件是否落在EditText中?

+0

你有什麼試過?我**高度推薦閱讀[OnTouchListener文檔](http://developer.android.com/reference/android/view/View.OnTouchListener.html)... – Sam 2012-07-06 23:35:20

+0

編輯我的文章。 – Ixx 2012-07-07 00:00:20

+0

我試過的東西叫做「在你編碼之前想想」 – 2012-07-11 21:57:09

回答

28

你到底想幹什麼?如果您只想檢測是否觸摸了EditText,請將OnTouchListener添加到EditText ...或OnClickListener。

編輯:如果你想外面檢測,可以在包含視圖檢測觸摸事件,然後,給你有你的EditText視圖:

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

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

或者你既增添了一絲監聽到的EditText和容器,並在EditText中返回false,這樣它將被截取並不會轉發給父級。因此,您在父級偵聽器中檢測到的所有觸摸都不屬於EditText。

+0

那是相反的。檢測觸摸事件是否發生在EditText之外。 – 2012-07-06 23:51:53

+0

但「內」不是指「裏面」,還是我的英語錯了? – Ixx 2012-07-06 23:54:22

+0

好的。我認爲這基本上是正確的。但我想澄清容器將會收到什麼。調試似乎表明像EditText這樣的包含元素吞噬了他們的觸摸事件,並且它們不會冒泡到容器中。活動中的其他元素(如複選框等)也會吞噬(不會冒泡)落入其區域的觸摸事件。也許他們是在清單中的某個設置中告訴一個包含的元素來觸發其觸摸事件,或者您是否需要重寫一個方法來執行此操作? – 2012-07-11 03:33:40