6

Ich habe ein Image und ein Textview in einem Linearlayout wie folgt gewickelt:Capturing Linearlayout onClick Ereignisse mit Image Inneren

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

Die Image durch eine benutzerdefinierte ziehbar für normale gesichert wird, fokussiert und gedrückt Staaten. Ich möchte dem Benutzer erlauben, irgendwo in das LinearLayout zu klicken, um ein OnClick-Ereignis auszulösen. Der folgende Code zeigt die für die OnClickListener ein:

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"); 
     } 
    }); 

Der Code funktioniert, wenn der Benutzer überall auf dem Textview klickt aber, wenn der Benutzer auf dem Image klickt wird das Ereignis Blase nicht bis zum Linearlayout. Ich definiere keinen onClickListener für die Schaltfläche. Ich möchte, dass sich das Zeichen für meinen ImageButton ändert, damit ich es nicht auf clickable = false setzen kann. Gibt es eine Möglichkeit, die Veranstaltung zu verblüffen?

Antwort

0

Wenn Sie die Schaltfläche nicht anklickbar machen möchten, können Sie einfach einen Listener zur Schaltfläche hinzufügen und die gleiche Aktion wie das LinearLayout onClick ausführen. Es würde dem Benutzer erscheinen, als ob es ein großer Knopf wäre.

+0

Danke Mayra, das funktioniert. Wie sollte ich das LinearLayout onClick-Ereignis auf das ImageButton herunterskalieren, so dass seine zeichnbaren Änderungen beim Drücken von LinearLayout angezeigt werden? – Richard

+0

Ich bin mir nicht sicher, auf welchen Zustand Sie sich beziehen. Funktioniert die Bildschaltfläche wie eine Umschalttaste und zeigt einen angeklickten Status an? Sie sollten in der Lage sein, einfach setChecked (checkedState) auf Ihrer Umschaltfläche aufzurufen. –

4

Um LinearLayout anklickbar zu machen, müssen Sie android:focusable="false" für alle untergeordneten Elemente festlegen.

+1

Ich setze alle Kind "android: focusable = false", aber LinearLayout immer noch nicht klickbar –

1

von dem, was ich verstehe, werden Sie die folgenden mehr brauchen:

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

Danach erstellen Sie die Funktion:

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 :: klickbare = "false" auf Image . Dies sollte helfen.

+2

nein, bitte lesen Sie die Frage: "Ich will es nicht auf klickbar = false setzen" – thriqon

Verwandte Themen