6

Mam ImageButton i TextView zawinięte w LinearLayout tak:zdarzeń Przechwytywanie LinearLayout onclick z ImageButton wewnątrz niej

<LinearLayout android:orientation="vertical" 
     android:layout_width="wrap_content" android:layout_height="wrap_content" 
     android:layout_weight="20" android:gravity="center" 
     android:clickable="true" android:id="@+id/action_showhide"> 
     <ImageButton android:id="@+id/test" 
      android:layout_width="wrap_content" android:layout_height="wrap_content" 
      android:src="@drawable/ic_toggle_hide_states" android:background="@null"></ImageButton> 
     <TextView android:id="@+id/TextView01" android:layout_width="wrap_content" 
      android:layout_height="wrap_content" android:text="@string/txtHide" 
      android:textColor="@drawable/orange" android:textStyle="bold"></TextView> 
    </LinearLayout> 

ImageButton jest wspierany przez niestandardowej rozciągliwej za normalne, skoncentrowany i wciśnięty stany. Chciałbym umożliwić użytkownikowi kliknięcie w dowolnym miejscu LinearLayout, aby wystrzelić zdarzenie OnClick. Poniższy kod pokazuje skonfigurować dla OnClickListener:

final LinearLayout actionHide = (LinearLayout) findViewById(R.id.action_showhide); 
    actionHide.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Log.d(AppAdvocate.TAG, "Event caught"); 
     } 
    }); 

kod działa, gdy użytkownik kliknie w dowolnym miejscu na TextView ale kiedy użytkownik kliknie na ImageButton zdarzenie nie robi bańkę do LinearLayout. Nie definiuję onClickListener dla przycisku. Chcę, aby rysowanie dla mojego ImageButton uległo zmianie, więc nie chcę ustawiać go na clickable = false. Czy istnieje sposób, aby spenetrować wydarzenie?

Odpowiedz

0

Jeśli naprawdę nie chcesz, aby przycisk nie był klikalny, możesz po prostu dodać detektor do przycisku i wykonać tę samą akcję, co onLick LinearLayout. Wydawałoby się to użytkownikowi, jakby był jednym wielkim przyciskiem.

+0

Dzięki Mayra, to działa. W jaki sposób powinienem kaskadować zdarzenie onLick LinearLayout w dół do ImageButton, aby jego wyciąganie zmieniało stan po naciśnięciu LinearLayout? – Richard

+0

Nie jestem pewien, do którego stanu się odnosisz. Czy przycisk obrazu działa jak przycisk Przełącz, w którym pokazuje stan kliknięcia? Powinieneś móc po prostu zadzwonić do setChecked (checkedState) na swoim przełączniku. –

4

Aby można było kliknąć LinearLayout, należy ustawić android:focusable="false" na wszystkich jego elementach potomnych.

+1

Ustawiam wszystko potomne "android: focusable = false", ale LinearLayout nadal nie można sklasyfikować –

1

z tego co rozumiem, będziesz potrzebował następujących czynności:

<LinearLayout android:orientation="vertical" 
     android:layout_width="wrap_content" android:layout_height="wrap_content" 
     android:layout_weight="20" android:gravity="center" 
     android:clickable="true" android:id="@+id/action_showhide"> 
     <ImageButton android:id="@+id/test" 
      android:layout_width="wrap_content" android:layout_height="wrap_content" 
      android:src="@drawable/ic_toggle_hide_states" android:background="@null">   </ImageButton> 
     <TextView android:id="@+id/TextView01" android:layout_width="wrap_content" 
      android:layout_height="wrap_content" android:text="@string/txtHide" 
      android:textColor="@drawable/orange" android:textStyle="bold" 
android:onClick="viewClicked"></TextView> 
    </LinearLayout> 

potem utworzyć funkcję:

public void viewClicked(View v){ 

    switch (v.getId()) 
    { 
     case R.id.action_showhide: 
      //do something 
      break; 
     case R.id.action_showhide: 
      //do something 
      break; 
    } 

} 
0

Set android :: klikalne = "false" na ImageButton . To powinno pomóc.

+2

nie, proszę przeczytać pytanie: "więc nie chcę ustawić na klikalne = false" – thriqon

Powiązane problemy