2012-03-20 2 views
1

시프트 키 또는 Alt 키의 키 누름을 캡처하려고하는데 실제 키보드로 올바르게 작동하는 것 같습니다. 불행히도 onScreen 키보드로 동일한 코드를 테스트 할 때 응답하지 않습니다 (2.1, 4.03 에뮬레이터 및 2.3 물리적 장치를 시도했습니다).소프트/온 스크린 키보드의 특수 키 누름 (shift, alt) 캡처

이것은 아마도 해결 방법이없는 플랫폼 문제인 것처럼 보이지만, 마지막 도랑 노력으로 누군가가 하나를 찾았는지 확인하려면 여기에 질문을 게시하고 싶습니다 (어떤 아이디어를 기꺼이 기꺼이 받아들이겠습니까).

감사합니다.

편집 내 지점을 명확하게 : 나는에 중단 점을 넣어 시도 나는 실제 키보드의 이동을 누르면 라인, 그리고 항상 중지됩니다 "(event.getAction() == KeyEvent.ACTION_DOWN)의 경우" , 그러나 결코 onScreenKeyboard의 이동을 누를 때. 따라서 문제는 onKey가 onScreenKeyboard의 모든 키 누르기에 대해 실행되고 있지 않다는 것입니다.

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

    mEditText1 = (EditText) findViewById(R.id.editText1); 

    mEditText1.setOnKeyListener(new OnKeyListener() { 

     @Override 
     public boolean onKey(View v, int keyCode, KeyEvent event) { 

      if (event.getAction() == KeyEvent.ACTION_DOWN) 
      { 
       switch (keyCode) 
       { 
        case KeyEvent.KEYCODE_DPAD_CENTER: 
        case KeyEvent.KEYCODE_ENTER: 
         Toast.makeText(IMETestActivity.this, "Enter was consumed", 
           Toast.LENGTH_SHORT).show(); 
         return true; 

        case KeyEvent.META_SHIFT_LEFT_ON: 
        case KeyEvent.META_SHIFT_RIGHT_ON: 
         Toast.makeText(IMETestActivity.this, "Meta Shift was consumed", 
           Toast.LENGTH_SHORT).show(); 
         return true; 

        case KeyEvent.KEYCODE_SHIFT_LEFT: 
        case KeyEvent.KEYCODE_SHIFT_RIGHT: 
         Toast.makeText(IMETestActivity.this, "Shift was consumed", 
           Toast.LENGTH_SHORT).show(); 
         return true; 

        default: 
         break; 
       } 
      } 

      return false; 
     } 
    }); 

} 

답변

0

키를 누를 때마다 키 코드를 기록하여 이벤트가 등록되고 있는지 확인하십시오. 그럴 경우 스위치 문에 해당 코드를 추가하십시오.

예를 들어, onKeyListener 시작 부분에 System.out.println (keyCode)과 같은 내용이 있습니다. LogCat을 사용하여 출력을 볼 수 있습니다.

+0

"if (event.getAction() == KeyEvent.ACTION_DOWN)"줄에 중단 점을 넣으려고했는데 실제로 키보드의 이동을 누르면 중지되지만 결코 이동하지 않을 때는 중단됩니다. onScreenKeyboard. 따라서 문제는 onKey가 onScreenKeyboard의 모든 키 누르기에 대해 실행되고 있지 않다는 것입니다. –