2012-04-24 25 views
7

Tôi đang sử dụng Bánh mì nướng với chế độ xem tùy chỉnh. Tôi khởi tạo chế độ xem và gọi setView trên bánh mì nướng. Bánh mì nướng được cho là nổi trên đầu và không nhận được sự kiện lấy nét và cảm ứng, và nó hoạt động tốt. Sau khi ứng dụng được khởi chạy, người dùng phàn nàn rằng trên một vài mẫu điện thoại như Galaxy Note, Toast đã nhận được sự kiện chạm và ứng dụng bên dưới không có.Android Toasts có các sự kiện chạm trên một số điện thoại, chứ không phải trên những người khác

Tôi đã in các cờ tham số bố cục (WindowManager.LayoutParams) mà chế độ xem có trong phương thức setLayoutParams. Nó chỉ ra rằng trên hầu hết các thiết bị, giá trị là 0x000098, nhưng trên một số nó là 0x040088. Trên các thiết bị mà bánh mì nướng được các sự kiện cảm ứng, cờ FLAG_NOT_TOUCHABLE được loại bỏ, và cờ FLAG_WATCH_OUTSIDE_TOUCH được thêm vào. Điều này giải thích lý do tại sao bánh mì nướng được các sự kiện liên lạc.

Nhưng điều gì gây ra sự khác biệt này? Có cách nào để buộc bánh mì nướng không thể chạm vào được không?

+0

Bạn có tìm thấy câu trả lời không? Ngoài ra, làm thế nào bạn đọc các thông số Toast? – theJosh

+0

Là "toast.getView(). SetEnabled (false);" làm việc cho bạn? Điều đó sẽ tắt các sự kiện cảm ứng trên chế độ xem của bánh mì nướng. – domi

+0

Câu hỏi này là 2 tuổi và đột nhiên trở lại cuộc sống. Tôi không có một thiết bị để kiểm tra điều này vào lúc này – yoah

Trả lời

1

Tôi có một công việc xung quanh. Bạn cần có quyền truy cập vào chế độ xem mà bánh mì nướng đang bao phủ. Bạn về cơ bản có thể nắm bắt các sự kiện liên lạc sẽ đến Toast. Sau đó thay đổi MotionEvent X và Y. Sau đó gửi MotionEvent đến khung nhìn bị che khuất. Nó cảm thấy một chút hacky với tôi, nhưng nó hoạt động. Tôi nghĩ sẽ tốt hơn nếu thay đổi cờ trên Toast nhưng tôi không thể tìm thấy chúng.

Trong các hoạt động tạo ra Toast:

final Taost toast = Toast.makeText(this, "Text", Toast.LENGTH_LONG); 
final View myCoveredView = findViewById(R.id.my_covered_view); 
final View toastView = toast.getView(); 

toastView.setOnTouchListener(new OnTouchListener() { 

       @Override 
       public boolean onTouch(final View v2, final MotionEvent event) { 
        //Make sure the view is accessible 
        if(myCoveredView != null){ 
         //Set the touch location to the absolute screen location 
         event.setLocation(event.getRawX(), event.getRawY()); 
         //Send the touch event to the view 
         return myCoveredView.onTouchEvent(event); 
        } 
        return false; 
       } 
      }); 

Nếu ai có một cách tốt hơn tôi rất thích đến đây nó.

+0

Đối với trường hợp của tôi, điều này không tốt vì chế độ xem bên dưới là một ứng dụng khác. Bạn có thể cố gắng để có được cái nhìn của bánh mì nướng, tìm cửa sổ, và thay đổi các cửa sổ cờ. Tôi không chắc chắn nếu những cờ này có thể được thay đổi – yoah

+0

Google sử dụng chế độ xem tùy chỉnh thay cho bánh mì nướng thông thường để thêm nút "hoàn tác" trong Gmail. Xem [câu hỏi SO này] (http://stackoverflow.com/questions/9575520/how-can-i-include-a-button-in-a-toast-notification) để biết thêm thông tin. – sonictt1

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