2012-06-26 30 views
5

Tôi có một hoạt động chính không sử dụng trình đơn tùy chọn. Tôi cần thực hiện hành vi này: 1. Khi nhấn nút Trình đơn Android, cửa sổ bật lên được hiển thị 2. Khi nút Trình đơn Android được nhấn một lần nữa, cửa sổ bật lên sẽ bị loại bỏ.Chặn nút Trình đơn Android trong PopupWindow

Tôi biết cách làm # 1 bằng cách ghi đè onKeyDown() trong hoạt động chính nhưng không biết cách làm # 2. Khi cửa sổ bật lên được hiển thị, onKeyDown() của hoạt động chính không được kích hoạt nữa.

Làm cách nào để chụp nút Trình đơn Android khi hoạt động chính có cửa sổ bật lên mở? (trong trường hợp của tôi, cửa sổ bật lên là PopupWindow có chế độ xem tăng cao).

BTW, tôi đã cố gắng để thiết lập một listener phím trên giao diện chính của cửa sổ bật lên nhưng nó không được kích hoạt

mTopView.setOnKeyListener(new View.OnKeyListener() {   
     @Override 
     public boolean onKey(View v, int keyCode, KeyEvent event) { 
      LogUtil.debug("*** Key: %d", keyCode); 
      return false; 
     } 
    }); 
+1

Nếu đó là tôi, tôi sẽ làm cho "cửa sổ bật lên" thành hoạt động của riêng nó, theo cách đó, nó có thể được thực hiện theo cách tương tự như trong MainActivity. Chỉ cần gọi kết thúc() khi menu được nhấn trong hoạt động bật lên. – FoamyGuy

+0

Cảm ơn. Tôi có rất nhiều mã được đầu tư vào các giải pháp popup (nó cần phải bật lên ở một vị trí cụ thể và hình dạng liên quan đến một cái nhìn neo). Nếu tôi không tìm được cách để nó hoạt động, tôi sẽ cố gắng tiếp cận hoạt động. – user1139880

Trả lời

14

Trả lời câu hỏi của riêng tôi. Gọi setFocusableInTouchMode() trên khung nhìn PopupWindow thực hiện thủ thuật và khiến người nghe làm việc.

PopupMenu popupMenu = ... 
... 
popupWindow.getContentView().setFocusableInTouchMode(true); 
popupMenu.getContentView().setOnKeyListener(new View.OnKeyListener() {   
    @Override 
    public boolean onKey(View v, int keyCode, KeyEvent event) { 
     if (keyCode == KeyEvent.KEYCODE_MENU && 
       event.getRepeatCount() == 0 && 
       event.getAction() == KeyEvent.ACTION_DOWN) { 
      // ... payload action here. e.g. popupMenu.dismiss(); 
      return true; 
     }     
     return false; 
    } 
}); 
0

thử này

if (keyCode == KeyEvent.KEYCODE_MENU) { 
     // Do Stuff 
    } 
Các vấn đề liên quan