2015-09-03 18 views
0

有沒有一種方法可以在任何時候在活動中發生觸摸並獲取其ID?任何時候點擊視圖的調用方法Android - Java

我有一個自定義視圖,我添加到相對佈局,然後隨時輕敲註冊在該自定義視圖之外我想隱藏自定義視圖。什麼是最好的方式去做這件事。

我試着在相對佈局中添加一個oncliecllistner,但是沒有起作用,因爲它只在相對佈局上註冊了水龍頭,所以當我點擊作爲相對佈局子項的textview時,它沒有被調用。而且,由於該自定義視圖和相對佈局重疊的某個時候,當我拍了拍自定義視圖將註冊爲在相對佈局水龍頭

感謝

+0

「我嘗試添加一個oncliecllistner的相對佈局,但沒有工作。」 - 請發佈你的代碼,並解釋什麼不工作。 – Egor

+0

將onClickListener添加到您的RelativeLayout以隱藏您的自定義視圖。這會點擊您的自定義視圖以隱藏它,因此只需將onClickListener添加到您的自定義視圖中即可攔截點擊事件。 – Gudin

+0

@Gudin如果我在自定義視圖上添加聽衆,如何知道何時在自定義視圖外點按以隱藏它? – spenf10

回答

0

一種方法是增加一個透明的空View(讓我們給它那覆蓋在佈局的一切,除了,你想成爲hidable查看標識overlayView)(讓我們給該ID bashful):

<RelativeLayout 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

    <!-- 
     All your existing non-bashful Views must be here, *before* overlayView. 
     That gives them a lower Z-order than overlayView. 
    --> 

    <View 
     android:id="@+id/overlayView" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
    /> 

    <!-- The bashful View must come last, so that it has the highest Z-order. --> 
    <View 
     android:id="@+id/bashful" 
     ... 
    /> 
</RelativeLayout> 

然後,在View.OnTouchListener(NOT View.OnClickListener)爲overlayView,你可以這樣做:

@Override 
public boolean onTouch(View v, MotionEvent event) { 
    mBashfulView.setVisibility(View.GONE); 
} 

此代碼假定你有一個mBashfulView變量引用bashful查看。

僅當用戶觸摸bashful視圖以外的任何地方時纔會調用偵聽器。

0

我強烈建議使用dispatchTouchEvent()。這是您的活動可以覆蓋的功能(具有簽名public boolean dispatchTouchEvent(MotionEvent ev)),它會將所有觸摸事件攔截到屏幕上。在此功能中,您將能夠決定如何處理觸摸事件。如果您確定您不想做任何特別的事情,並且應該允許用戶的觸摸按正常進行,請致電super.dispatchTouchEvent(ev)

有些文檔: http://developer.android.com/reference/android/app/Activity.html#dispatchTouchEvent(android.view.MotionEvent)

相關問題