2012-02-07 34 views

Trả lời

3

Có lẽ bạn muốn phát hiện sự kiện cảm ứng ở bất kỳ đâu trong giới hạn của hộp thoại. Nếu bạn đang tạo hộp thoại tùy chỉnh (tức là bằng cách lắp ráp một tập hợp View s thành bố cục View của một số loại và sau đó đặt bố cục View làm nội dung chính của hộp thoại bằng cách sử dụng .setContentView()) thì có thể bạn chỉ cần đặt người nghe onTouch nội dung cha mẹ đó View. Hơn nữa, bạn có thể nắm giữ các khung nhìn bằng cách sử dụng mDialog.findViewById(), vì vậy nếu bạn đang sử dụng một số AlertDialog, có lẽ bạn có thể xác định bằng cách nào đó ID tài nguyên nào sẽ sử dụng để giữ bố cục chính View.

+0

Cảm ơn bạn. Tôi đã bỏ lỡ phần thoại trước findViewById 0_0 – Ahmed

0

Bạn luôn có thể tạo hoạt động hộp thoại của riêng mình và kết thúc cuộc gọi() khi người dùng nhấp vào khu vực bạn muốn đóng hộp thoại của mình.

+0

Cảm ơn bạn đã trả lời. Nhưng tôi muốn có Hộp thoại di chuột qua hoạt động hiện tại của mình (có một vùng trong suốt trên & dưới Hộp thoại mà từ đó hoạt động hiện tại của tôi được hiển thị). Để làm nổi bật, Hộp thoại được hiển thị khi một nút trong hoạt động của tôi được nhấp. Tôi có thể loại bỏ Hộp thoại bằng cách nhấn vào vùng bên ngoài Hộp thoại bằng cách sử dụng dialog.setCanceledOnTouchOutside (true); Theo các loại thẻ, tôi không thể sử dụng bất kỳ nút nào trên Hộp thoại! Do đó, tôi đang cố gắng tìm kiếm một cách để loại bỏ Hộp thoại khi nó được bấm. – Ahmed

+0

Bạn có thể sử dụng bất kỳ bố cục nào bạn muốn với một hoạt động; bao gồm cả cái trong suốt. Nó sẽ trông giống như một hộp thoại và bạn có thể làm cho nó hoạt động theo bất kỳ cách nào bạn muốn. Nếu bạn thực sự muốn một cái gì đó trông và cư xử giống như một hộp thoại phương thức nhưng với tùy chỉnh bỏ qua logic, điều này sẽ làm việc. –

1

Nếu bạn có Bố cục trong Hộp thoại, bạn có thể tham chiếu đến đó dưới dạng chế độ xem và đặt onClickListener trên đó. Vì vậy, giả sử hộp thoại của bạn có bố cục tùy chỉnh và xem toàn bộ hộp thoại, hãy tham khảo điều đó.

Ví dụ, giả sử một hộp thoại có một LinearLayout tên mainll, có chứa quan điểm tùy chỉnh của bạn, bạn sẽ:

LinearLayout ll - (LinearLayout) findViewById(R.id.mainll); 
ll.setOnClickListener(...) { onClick()... } 

Sau đó, bất cứ lúc nào bất cứ điều gì được nhấp trong LinearLayout, nó sẽ đăng ký một sự kiện nhấp chuột.

10

Ghi đè Dialog.onTouchEvent(...) bắt bất kỳ vòi nước nào, ở bất kỳ đâu trên màn hình. Để loại bỏ hộp thoại bằng cách nhấn vào bất kỳ đâu:

Dialog dialog = new Dialog(this) { 
    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
    // Tap anywhere to close dialog. 
    this.dismiss(); 
    return true; 
    } 
}; 

Đoạn mã này vô hiệu hóa nhu cầu gọi dialogObject.setCanceledOnTouchOutside(true);.

0
here i have taken my close icon ,if u need u can take anything like button 

first of all u have implement to the class 

class somethingclass Dialog implements View.OnClickListener 

then set the event for particular 

     icon_close.setOnClickListener(this); 

then override the class function 

    @Override 
    public void onClick(View v) { 
     if(R.id.icon_close==v.getId()){ 
      dismiss(); 
     }else 
} 


Note: if passible u can give dilaog.dismiss(); 
Các vấn đề liên quan