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"
/>
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
Postez votre R.layout.keyboard xml –