2014-06-30 2 views
0

다음과 같이 View 확장 내에서 다음과 같은 두 번 탭 제스처가 있습니다. 이 이벤트는 해고되면 내보기로 초점을 변경합니다. MyView.this.requestFocus(); 가 호출되고 키보드가 나타납니다. 불행히도 (삼성 전자 갤럭시 노트 2 실행 안드로이드 4.0.4) 나는 전혀 dispatchKeyEvent 콜백을받지 않습니다. Android 4.4 이상을 실행하는 Nexus 4에서이 콜백을받습니다. 계속 진행하는 방법을 모르겠습니다.dispatchKeyEvent가 호출되지 않았습니다.

private class DoubleTapGestureListener extends SimpleOnGestureListener { 

     private Context mContext; 
     private Rect mTextBounds; 

     public DoubleTapGestureListener(Context context) { 
      super(); 
      mContext = context; 
     } 

     @Override 
     public boolean onDoubleTap(MotionEvent e) { 
      float xValue = e.getX(); 
      float yValue = e.getY(); 

      for (PaintBrush brush : brushes) { 
       mTextBounds = brush.getTextBounds(); 

       if (mTextBounds.contains((int)xValue, (int)yValue)) { 
        Log.i(TAG, "Doubletap on text!"); 
        InputMethodManager imm = (InputMethodManager) mContext 
          .getSystemService(Context.INPUT_METHOD_SERVICE); 
        MyView.this.requestFocus(); 
        imm.showSoftInput(MyView.this, 
          InputMethodManager.SHOW_FORCED); 
       } 

      } 

      return true; 
     } 

     public void setTextBounds(Rect mTextBounds) { 
      this.mTextBounds = mTextBounds; 
     } 

    } 

} 

답변

0

소프트 키보드는 물리적 인 키와 키보드에서만 키 이벤트를 보내지 않습니다. 소프트 키보드는 InputConnection을 사용하여 이벤트를 전송합니다 (키 이벤트 또는 commitText 호출 일 수 있음). 모든 이벤트를 가져 오려면 InputConnection을 구현해야합니다.

+0

죄송합니다. 안드로이드 개발에 조금 익숙하지만 다른 장치에서 이벤트가 시작됩니다. 그래서이 경우 갤럭시 노트 2와 넥서스 장치에서 해고 된 이벤트를받을 수 있도록 권장 할만한 것이 있습니까? – TheCodingArt

+0

키보드 키를 눌렀을 때 이벤트가 발생하지 않아야합니다. 따라서 캐릭터 라인 값을 모델 객체에 추가하여 화면을 다시 그릴 수 있습니다. – TheCodingArt

+0

Android 소프트 키 보드는 이와 같이 작동하지 않습니다. 보기를 위해 InputConnection을 구현해야하는데, 이는 상당히 많은 작업입니다. –

관련 문제