2011-04-20 52 views
2

我有一個自定義View,它包含一個按鈕和一個視圖,該視圖在包含多項選擇項的自定義視圖的按鈕下面進行動畫處理。當用戶按下按鈕時,我會顯示項目的「下拉列表」。我想在下拉菜單之外按下時隱藏「下拉菜單」。我試圖覆蓋onTouchEventonInterceptTouchEvent,但這些並不總是被稱爲。Android:如何關閉用戶按下視圖時的自定義視圖

我看了一下Spinner的源代碼,並注意到谷歌正在使用一個對話框來實現我認爲是它的下拉菜單(它在這一點上的定位超出了我的意思)。

有沒有什麼辦法可以讓我的View攔截Window上的所有觸摸事件?

回答

4

您可以在頂部ViewGroup上實施onTouchListener(例如,在LinearLayout或您正在使用的任何設備上)。

然後,確定您的自定義視圖的位置:如果觸摸位置(使用event.getX()event.getY()方法)是視野之外(使用myView.getTop()等),那麼就可以將其隱藏(myView.setVisibility(View.GONE)。

無論如何,它應該return false允許兒童View s來處理觸摸。

從Android開發者指南:

記住,關鍵事件總是焦點傳遞到當前視圖。它們從View層次結構的頂部開始分派,然後向下,直到它們到達適當的目的地。

注:Android將首先調用事件處理程序,然後再從類定義中調用合適的默認處理程序。因此,從這些事件偵聽器返回true將停止事件傳播給其他事件偵聽器,並且還會阻止視圖中默認事件處理程序的回調。所以當你返回true時,要確定你想終止事件。

0

我不知道它是如何工作的,但TouchDelegate可能是一個乍一看的解決方案。此外,Activity.onTouchEvent()可能值得一檢查。

如果它們不適用(即,您不知道如何使用TouchDelegate,並且您的佈局有可能在「下拉」視圖之外執行觸摸的按鈕),則可以考慮intercepting the event,但它仍然會「向上「的觀點。

相關問題