2017-06-13 1 views
1

Je classe SimpleIME.kt afin de mettre en œuvre InputMethodEditor simple et faire mon clavier personnalisé sur Android:ClassCastException: android.inputmethodservice.KeyboardView ne peut pas être jeté à com.support.mukhtar.simplekeyboard.CustomKeyboardView android

class SimpleIME : InputMethodService(), OnKeyboardActionListener { 

private var kv: CustomKeyboardView? = null 
private var keyboard: Keyboard? = null 
companion object{ 
    const val TAG :String = "myLogs" 
} 

private var caps = false 

override fun onCreateInputView(): View? { 
    kv = layoutInflater.inflate(R.layout.keyboard, null) as CustomKeyboardView 
    keyboard = Keyboard(this, R.xml.qwerty) 
    kv!!.keyboard = keyboard 
    kv!!.setOnKeyboardActionListener(this) 
    Log.d(TAG,"onCreateInputView") 
    return kv 
} 
... 
} 

et ma classe CustomKeuboardView comme ci-dessous:

class CustomKeyboardView : KeyboardView { 

constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) 

constructor(context: Context, attrs: AttributeSet?, defStyle: Int) : super(context, attrs, defStyle) 

override fun onKeyMultiple(keyCode: Int, repeatCount: Int, event: KeyEvent?): Boolean { 
    return super.onKeyMultiple(keyCode, repeatCount, event) 
} 

override fun onTouchEvent(me: MotionEvent?): Boolean { 
    Log.d(TAG,"onTouchEvent "+me.toString()) 
    return super.onTouchEvent(me) 
} 
} 

il jette ClassCastException comme ci-dessous:

java.lang.ClassCastException: android.inputmethodservice.KeyboardView cannot be cast to com.support.mukhtar.simplekeyboard.CustomKeyboardView 
                at com.support.mukhtar.simplekeyboard.SimpleIME.onCreateInputView(SimpleIME.kt:30) 
                at android.inputmethodservice.InputMethodService.updateInputViewShown(InputMethodService.java:1248) 
                at android.inputmethodservice.InputMethodService.showWindowInner(InputMethodService.java:1669) 
                at android.inputmethodservice.InputMethodService.showWindow(InputMethodService.java:1636) 
                at android.inputmethodservice.InputMethodService$InputMethodImpl.showSoftInput(InputMethodService.java:497) 
                at android.inputmethodservice.IInputMethodWrapper.executeMessage(IInputMethodWrapper.java:202) 
                at com.android.internal.os.HandlerCaller$MyHandler.handleMessage(HandlerCaller.java:40) 
                at android.os.Handler.dispatchMessage(Handler.java:102) 
                at android.os.Looper.loop(Looper.java:136) 
                at android.app.ActivityThread.main(ActivityThread.java:5426) 
                at java.lang.reflect.Method.invokeNative(Native Method) 
                at java.lang.reflect.Method.invoke(Method.java:515) 
                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268) 
                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084) 
                at dalvik.system.NativeStart.main(Native Method) 

si je mets en œuvre la classe SimpleIME.kt comme suit:

class SimpleIME : InputMethodService(), OnKeyboardActionListener { 

private var kv: KeyboardView? = null 
private var keyboard: Keyboard? = null 
companion object{ 
    const val TAG :String = "myLogs" 
} 

private var caps = false 

override fun onCreateInputView(): View? { 
    kv = layoutInflater.inflate(R.layout.keyboard, null) as KeyboardView 
    keyboard = Keyboard(this, R.xml.qwerty) 
    kv!!.keyboard = keyboard 
    kv!!.setOnKeyboardActionListener(this) 
    Log.d(TAG,"onCreateInputView") 
    return kv 
} 
... 
} 

il fonctionne très bien, mais je dois mettre en œuvre onTouchEvent en KeyboardView afin de gérer plusieurs clics, donc je pense qu'il est nécessaire de mettre en œuvre CustomKeyboardView classe; Il est un exemple de CustomKeyboardView écrit en java: https://github.com/blackcj/AndroidCustomKeyboard.git S'il vous plaît aider

ma question ne fait pas même que celle-ci: java.lang.ClassCastException: android.inputmethodservice.KeyboardView cannot be cast to android.view.ViewGroup

parce qu'il ya un problème avec layout.xml mais je n'ai pas de problème avec elle parce que cela fonctionne si je prends comme KeyboardView comme indiqué avant

mon fichier layout.keyboard.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<android.inputmethodservice.KeyboardView 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/keyboard" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:layout_alignParentBottom="true" 
android:background="#3Aad1a" 
android:keyPreviewLayout ="@layout/preview" 
/> 
+0

Copie possible de [java.lang.ClassCastException: android.inputmethodservice.KeyboardView ne peut pas être castée en android.view.ViewGroup] (https://stackoverflow.com/questions/43785328/java-lang-classcastexception-android-inputmethodservice -keyboardview-ne peut pas être) – Codexer

+0

Postez votre R.layout.keyboard xml –

Répondre

1

il suffit de remplacer android.inputmethodservice.KeyboardView à CustomKeyboardView dans R.layout.keyboard fichier XML.

+1

Merci beaucoup match, je ne peux pas voter vous répondre n'a pas assez de réputation, Merci beaucoup match –

+0

@ MukhtarBimurat si cela vous aide, s'il vous plaît accepter answer - https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work –

+1

désolé d'apprendre à utiliser stackoverflow –