6

Tôi có một ImageButton và một TextView bọc trong một LinearLayout như thế này:chụp LinearLayout onClick sự kiện với ImageButton bên trong nó

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

Các ImageButton được hỗ trợ bởi một drawable tùy chỉnh cho bình thường, tập trung và ép các tiểu bang. Tôi muốn cho phép người dùng nhấp vào bất kỳ nơi nào trong LinearLayout để kích hoạt sự kiện OnClick. Đoạn code dưới đây cho thấy các thiết lập cho 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"); 
     } 
    }); 

Mã này hoạt động khi người dùng nhấp bất cứ nơi nào trên TextView nhưng khi người dùng nhấp vào ImageButton sự kiện không bong bóng lên đến LinearLayout. Tôi không định nghĩa onClickListener cho nút. Tôi muốn drawable cho ImageButton của tôi để thay đổi vì vậy tôi không muốn đặt nó để clickable = false. Có cách nào để bong bóng sự kiện này không?

Trả lời

0

Nếu bạn thực sự không muốn làm cho nút không thể nhấp, bạn chỉ có thể thêm người nghe vào nút và thực hiện hành động tương tự như nhấp chuột LinearLayout onClick. Nó sẽ xuất hiện cho người dùng như thể nó là một nút lớn.

+0

Cảm ơn Mayra, tác phẩm này hoạt động. Làm thế nào tôi nên cascade các LinearLayout onClick sự kiện xuống ImageButton để thay đổi drawable của nó nhà nước khi LinearLayout được nhấn? – Richard

+0

Tôi không chắc bạn đang nói đến trạng thái nào. Nút hình ảnh có hoạt động giống như nút Chuyển đổi, nút này hiển thị trạng thái được nhấp không? Bạn sẽ có thể chỉ cần gọi setChecked (checkedState) trên nút bật tắt của bạn. –

4

Để thực hiện LinearLayout, bạn cần phải đặt android:focusable="false" trên tất cả các phần tử con của nó.

+1

Tôi đặt tất cả các con "android: focusable = false", nhưng LinearLayout vẫn không thể nhấp vào –

1

từ những gì tôi hiểu, bạn sẽ cần những điều sau đây:

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

Sau đó, bạn tạo ra các chức năng:

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 :: nhấp được = "false" trên ImageButton . Điều này sẽ giúp.

+2

không, vui lòng đọc câu hỏi: "vì vậy, tôi không muốn đặt nó thành có thể nhấp = false" – thriqon

Các vấn đề liên quan