我SimpleIME.kt類,以實現簡單的InputMethodEditor,做我的自定義鍵盤Android上:ClassCastException異常:android.inputmethodservice.KeyboardView不能轉換到Android的com.support.mukhtar.simplekeyboard.CustomKeyboardView
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
}
...
}
和我CustomKeuboardView類,如下:
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)
}
}
它拋出ClassCastException異常如下:
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)
如果我實現SimpleIME.kt類如下:
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
}
...
}
它工作正常,但我需要爲處理多個點擊,所以我認爲這是實現CustomKeyboardView類必要KeyboardView實施的onTouchEvent; 有是用Java編寫CustomKeyboardView的例子:https://github.com/blackcj/AndroidCustomKeyboard.git 請幫
因爲沒有與layout.xml一個問題,但我沒有任何與它的問題因爲它的工作原理,如果我拿的KeyboardView作爲
之前顯示我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"
/>
可能重複[java.lang.ClassCastException:android.inputmethodservice.KeyboardView無法轉換爲android.view.ViewGroup](https://stackoverflow.com/questions/43785328/java-lang-classcastexception-android-inputmethodservice -keyboardview-can not-be) – Codexer
發佈您的R.layout.keyboard xml –