6

que tienen un ImageButton y una TextView envuelto en una LinearLayout así:captura de eventos onClick LinearLayout con ImageButton su interior

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

El ImageButton está respaldado por una dibujable personalizada para el normal, enfocado y estados presionado. Me gustaría permitir que el usuario haga clic en cualquier parte de LinearLayout para activar un evento OnClick. El código siguiente muestra la puesta en marcha de la 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"); 
     } 
    }); 

El código funciona cuando el usuario hace clic en cualquier lugar de la TextView pero cuando el usuario hace clic en el ImageButton el evento no se suben a la LinearLayout. No estoy definiendo un OnClickListener para el botón. Quiero que el drawable de mi ImageButton cambie, así que no quiero configurarlo como falso. ¿Hay alguna manera de hacer explotar el evento?

Respuesta

0

Si realmente no desea que el botón no se pueda hacer clic, puede simplemente agregar un oyente al botón y realizar la misma acción que el LinearLayout onClick. Parecería al usuario como si fuera un botón grande.

+0

Gracias Mayra, esto funciona. ¿Cómo debería conectar en cascada el evento LinearLayout onClick al ImageButton para que su drawable cambie de estado cuando se presiona LinearLayout? – Richard

+0

No estoy seguro del estado al que se refiere. ¿El botón de imagen actúa como un botón de Alternar, donde muestra un estado de clic? Debería poder llamar a setChecked (checkedState) en su botón de alternar. –

4

Para poder hacer clic en LinearLayout, debe establecer android:focusable="false" en todos sus elementos secundarios.

+1

Configuré todo el elemento secundario "android: focusable = false", pero LinearLayout aún no se puede cliquear –

1

por lo que entiendo, que voy a necesitar lo siguiente:

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

Después de eso, se crea la función:

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

Conjunto androide puede hacer clic :: = "false" en ImageButton . Esto debería ayudar.

+2

no, por favor lea la pregunta: "así que no quiero configurarlo para hacer clic = falso" – thriqon

Cuestiones relacionadas