cocos2d-x ] 안드로이드 새로운 키패드 타입 셋팅
Programing/cocos2d-x 2014. 3. 17. 20:30 |코코스에서는 키패드 불려내면 기본적인 키패드밖에 지원해주지 않는다.
그래서 여러가지 키패드를 불려내고 싶으면 구현해야한다.
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);
'Programing > cocos2d-x' 카테고리의 다른 글
cocos2d-x ] 홈키로 어플 나왔다가 들어갔을 때 로딩 긴 이유 해결 (0) | 2014.03.24 |
---|---|
cocos2d-x ] 사용자폰트 로드시 뻗는 현상 (0) | 2014.03.24 |
cocos2d-x Jni 통신 Java -> C++ (0) | 2012.10.24 |
cocos2d-x jni통신 C++ -> Java (0) | 2012.10.24 |
cocos2d-x layer 클리핑 (0) | 2012.08.23 |