코코스에서는 키패드 불려내면 기본적인 키패드밖에 지원해주지 않는다.

 

그래서 여러가지 키패드를 불려내고 싶으면 구현해야한다.

 

CCTextFieldTTF::attachWithIME()

 

이 함수가 키패드 불려내는 함수 인데

 

이 것을 새롭게 하나 구현 하면 된다.

 

bool CCTextFieldTTF::attachWithIME( int keyType )
{
 bool bRet = CCIMEDelegate::attachWithIME();
 if (bRet)
 {
  // open keyboard
  CCEGLView * pGlView = CCDirector::sharedDirector()->getOpenGLView();
  if (pGlView)
  {
   pGlView->setIMEKeyboardState(true, keyType);
  }
 }
 return bRet;
}

 

이런식으로 구현

 

CCEGLView::setIMEKeyboardState(bool bOpen, int keyType) 이 함수 또한 새로 구현 한거임

 

CCEGLView소스는 안드로이드,win32,ios 플래폼 세군데 있는데 일단 함수는 세군대 다 만들어주고

 

난 안드로이드에서 패드 불려낼꺼니깐 안드로이드 CCEGLView  cpp,h 파일에서 구현 해주면 된다.

 

void CCEGLView::setIMEKeyboardState(bool bOpen, int keyType)
{
 setKeyboardState_KeyTypeJNI((int)bOpen, keyType);
}

 

이런식으로

 

결국엔 안드로이다 함수를 불려야 하므로 JNI통신을 해야한다.

 

이부분이 JNI통신 하는 부분

void openKeyboard_KeyTypeJNI(int keyType) {
  JniMethodInfo t;

  if (JniHelper::getStaticMethodInfo(t, "org/cocos2dx/lib/Cocos2dxGLSurfaceView", "openIMEKeyboard_KeyPadType", "(I)V")) {
   t.env->CallStaticVoidMethod(t.classID, t.methodID, keyType);
   t.env->DeleteLocalRef(t.classID);
  }
 }

 

당연히 이클립스에서 해당 java파일에서 openIMEKeyboard_KeyPadType 이 함수 부분 구현해야 한다.

 

여기서 가장 중요한것은

 

setInputType 이 함수가 키패드 타입을 셋팅 할 수 있는 함수라는 것이다.

 

//키패드 타입 설정

Cocos2dxGLSurfaceView.this.mCocos2dxEditText.setInputType(msg.arg1);

final InputMethodManager imm = (InputMethodManager)

Cocos2dxGLSurfaceView.mCocos2dxGLSurfaceView.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
//키패드 보이게 호출

imm.showSoftInput(Cocos2dxGLSurfaceView.this.mCocos2dxEditText, 0);

 

Posted by 부우산사나이
: