2012-07-01 36 views
9

Tôi muốn bắt đầu một hoạt động khi người dùng nhấn phím cách. Mã của tôi không phát hiện khi thanh dấu cách được nhấp.Bắt đầu hoạt động khi một phím được nhấn

@Override 
public boolean dispatchKeyEvent(KeyEvent e) { 
    if (e.getKeyCode() == KeyEvent.KEYCODE_SPACE) { 
     Toast.makeText(MainActivity.this, "YOU CLICKED SPACE KEY", 
       Toast.LENGTH_LONG).show(); 
     return true; 
    } 
    Toast.makeText(MainActivity.this, "Didnt work", Toast.LENGTH_SHORT) 
      .show(); 
    return super.dispatchKeyEvent(e); 
}; 

}

Trả lời

8

Bạn có thể thiết người nghe đến một Viewhiện tập trung, hoặc sử dụng dispatchKeyEvent trong Activity của bạn, như đã thấy in this answer.

Cả hai đều sẽ hoạt động.


trả lời cho bình luận của bạn: Nếu bạn đã theo liên kết của tôi, bạn đã có thể thực hiện Activity.dispatchKeyEvent(KeyEvent) bởi bây giờ. :-)

Mã doesnt đăng ký Phím bất tôi bấm, nhưng khi tôi nhấn phím nó nâng cốc chúc mừng cho tôi "didnt làm việc" trở lại

Bạn có xảy ra để được sử dụng giả lập? Tôi hỏi rằng vì SDK mới nhất dường như có một số vấn đề với bàn phím giả lập. Các phím đặc biệt (DPAD, HOME, BACK vv) hoạt động, nhưng bàn phím QWERTY trên màn hình không đăng ký bất kỳ thao tác nhấn nào. Bàn phím vật lý trong máy tính xách tay của tôi sẽ không đăng ký bất kỳ máy ép nào.

Đừng hỏi tôi tại sao.

Và tôi nói rằng vì tuần này tôi đã đăng câu trả lời trong liên kết và nó hoạt động tốt. Thay đổi là tôi đã cập nhật SDK Android lên R20/JB sáng nay, vì vậy tôi đoán đó có thể là một yếu tố.

Tuy nhiên, nó sẽ chỉ làm việc trên một thiết bị thực. Tôi vừa kết nối một bàn phím vật lý với máy tính bảng của mình (P7510/Honeycomb 3.2) và nó lắng nghe các lần nhấn không gian tốt.

Trong trường hợp bạn vẫn còn đang nghi ngờ, đây là bằng chứng: :-)

enter image description here

+0

Vì vậy, có, bạn không đặt trình lắng nghe đó thành Chế độ xem hoặc Chế độ xem mà bạn đặt trình lắng nghe không được đặt tiêu điểm khi bạn nhấn phím cách. – davidcesarino

+0

Tôi đã chỉnh sửa mã của mình bằng dispatchkeyevent. Tôi sẽ thử nó theo cách khác nhưng trong khi đó mã cập nhật của tôi được đăng. –

+0

Vậy, nó có hoạt động không? Bánh mì nướng có xuất hiện không khi bạn nhấn phím ENTER? – davidcesarino

1

Đối với trường hợp này, những gì tôi đã làm được, tôi đã sử dụng chức năng ghi đè 'onKey'

@Override 
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) 
{ 
    if (keyCode == nNeededKeyCode) 
    { 
     //do something 
    } 
    return true; 
} 

ps trước hết bạn cần sử dụng 'OnKeyListener()' để nhận sự kiện nhấn phím

1

Xin lỗi vì câu trả lời sao chép/dán, nhưng điều này sẽ thực hiện những gì bạn đang cố gắng.

Điều này sẽ diễn ra khi người dùng nhấn "phím cách" và sau đó cho phép phím cách đi. Nếu bạn không muốn đợi chúng bỏ qua, bạn có thể loại bỏ các giá trị boolean của tôi và thực thi mã của bạn trong hàm onKeyDown. Hi vọng điêu nay co ich.

boolean spacePressed = false; 
@Override 
public boolean onKeyDown(View arg0, Editable arg1, int arg2, KeyEvent arg3) { 
    // TODO Auto-generated method stub 
     switch (keyCode) { 
       case KeyEvent.KEYCODE_SPACE: 
       { 
        spacePressed = true; 
        return true; 
       } 
       // other cases can go here 
    } 

    return true; 
}// End of onKeyDown 



@Override 
public boolean onKeyUp(View arg0, Editable arg1, int arg2, KeyEvent arg3) { 
    if (spacePressed){ 
     // start intent 

     // make this false again, so other keys won't trigger it 
     spacePressed = false; 
    } 

    return true; 
}// End of onKeyUp 
2
public abstract boolean onKey (View v, int keyCode, KeyEvent event) 

Chức năng này có thể được sử dụng để kiểm tra xem có phím được nhấn.

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