2016-07-23 3 views
0

У меня есть иерархия просмотра в одном из своих макетов следующим образом (упрощенный XML, чтобы сделать этот вопрос ясного):Как добавить один прослушиватель кликов для родительского контейнера и всех дочерних элементов?

<LinearLayout 
    android:id="@+id/top_container" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical"> 
     <LinearLayout 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:orientation="horizontal" 
       android:layout_marginLeft="10dp" 
       android:layout_marginRight="10dp" 
       android:layout_marginBottom="8dp" 
       > 
       // 2 childern here 
     </LinearLayout> 
     <RelativeLayout 
      android:id="@+id/inner_layout" 
      android:layout_width="match_parent" 
      android:layout_marginLeft="10dp" 
      android:layout_marginRight="10dp" 
      android:layout_marginTop="10dp" 
      android:layout_height="180dp" 
      > 
      // children here 
     </RelativeLayout> 
</LinearLayout> 

Я хотел бы, чтобы выполнить действие по щелчку везде в этой точке зрения.
Добавление прослушивателя кликов на top_container не работает, если я не щелкнул его где-нибудь сверху, где я не касаюсь ни одного из дочерних представлений.
Есть ли способ сделать это без необходимости добавлять прослушиватель кликов ко всем дочерним элементам (который вызовет тот же обработчик)?

Обновление:
Обертывание все в FrameLayout не решить. Если я нажимаю в любом месте RelativeLayout щелчок слушатель еще не уволен

+1

Вы пишете какой-либо прослушиватель кликов для просмотра вашего ребенка? – Drv

+0

@ Drv: Вы правы. В одном из дочерних представлений был прослушиватель кликов. Напишите это как ответ, и я приму это – Jim

+0

@Jim Не мой ответ соответствует вашему требованию? – Divers

ответ

1

Wrap все в RelativeLayout и поставить пустой FrameLayout Выше всех ваших взглядов, например:

<RelativeLayout> 
     <Your views....> 

     <FrameLayout 
     android:id="@+id/top_layer" 
     android:layout_width="match_parent" 
     android:layout_height ="match_parent"/> 

    </RelativeLayout> 

and then: 

findViewById(R.id.top_layer).setOnClickListener(....)

В случае если вы» d, чтобы передать событие клика на слое ниже (к вашим представлениям), вы можете использовать addOnItemTouchListener вместо ClickListener