6

Ho un ImageButton e un TextView avvolto in un LinearLayout come questo:eventi Cattura LinearLayout onClick con ImageButton suo interno

<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> 

L'ImageButton è supportato da una drawable personalizzato per il normale, concentrato e stati premuti. Vorrei consentire all'utente di fare clic in qualsiasi punto del LinearLayout per attivare un evento OnClick. Il codice seguente mostra il set up per l'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"); 
     } 
    }); 

Il codice funziona quando l'utente fa clic in qualsiasi punto della TextView ma quando l'utente fa clic sul ImageButton l'evento non fa bolla fino al LinearLayout. Non sto definendo un onClickListener per il pulsante. Voglio che il drawable del mio ImageButton cambi, quindi non voglio impostarlo su clickable = false. C'è un modo per ribaltare l'evento?

risposta

0

Se davvero non si desidera rendere il pulsante non selezionabile, è sufficiente aggiungere un listener al pulsante ed eseguire la stessa azione di LinearLayout onClick. Sembrerebbe all'utente come se fosse un grosso tasto.

+0

Grazie Mayra, questo funziona. In che modo è necessario collegare in cascata l'evento onClick di LinearLayout a ImageButton in modo che le sue modifiche modificabili vengano definite quando si preme LinearLayout? – Richard

+0

Non sono sicuro dello stato a cui ti riferisci. Il pulsante immagine funziona come un pulsante di commutazione, in cui mostra uno stato cliccato? Dovresti essere in grado di chiamare semplicemente setChecked (checkedState) sul tuo pulsante di attivazione/disattivazione. –

4

Per rendere cliccabile LinearLayout è necessario impostare android:focusable="false" su tutti gli elementi figlio.

+1

Ho impostato tutti i child "android: focusable = false", ma LinearLayout è ancora non modificabile –

1

da quanto ho capito, ti servirà il seguente:

<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> 

Dopo di che, si crea la funzione:

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 :: cliccabile = "false" su ImageButton . Questo dovrebbe aiutare.

+2

no, leggi la domanda: "quindi non voglio impostarlo su clickable = false" – thriqon

Problemi correlati