2012-03-29 32 views
6

Khi nghe các sự kiện quan trọng trong ActionBarSherlock để hiển thị menu mục bổ sung trên thiết bị trước ICS và tôi đang gặp phải một vấn đề thú vị. Có vẻ như tôi không thể phân biệt một lần nhấn phím đơn giản so với khi người dùng nhấn và giữ phím menu với ý định hiển thị IME. Cả hai KeyEvent trường là hoàn toàn giống nhau và giống như thế này:Phân biệt menu thường xuyên KeyEvent từ IME Mở

Có cách nào đơn giản để phân biệt giữa hai sự kiện riêng biệt?

+0

Sử dụng gọi lại 'onPrepareOptionsMenu' là dự phòng của tôi nhưng tôi muốn xử lý thông qua các sự kiện chính. –

Trả lời

3

Hmmmm ... onLongKeyPress() dường như không hoạt động với KEYCODE_MENU. Thật khó chịu.

Điều này dường như làm việc trên Nexus S (4.0.3) và Nexus One (2.3.6):

public class MenuKeyDetectorActivity extends Activity { 
    boolean wasLongPress=false; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    } 

    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_MENU) { 
     wasLongPress=wasLongPress | event.isLongPress(); 
    } 

    return(false); 
    } 

    @Override 
    public boolean onKeyUp(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_MENU) { 
     Log.w("MKD", String.format("wasLongPress: %b", wasLongPress)); 
     wasLongPress=false; 
    } 

    return(false); 
    } 
} 

Về cơ bản, lưu ý cho dù đó là một lâu báo chí hay không trong onKeyDown() cuộc gọi của bạn, sau đó sử dụng thông tin đó trong onKeyUp() để xác định bố cục cuối cùng.

+0

Hy vọng kỹ thuật này sẽ hoạt động với 'onKeyEvent' và phát hiện hành động lên/xuống. Tôi không hiểu tại sao nó lại không. Cảm ơn! –

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