2017-06-13 108 views
1

我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 請幫

我的問題不一樣的:java.lang.ClassCastException: android.inputmethodservice.KeyboardView cannot be cast to android.view.ViewGroup

因爲沒有與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" 
/> 
+0

可能重複[java.lang.ClassCastException:android.inputmethodservice.KeyboardView無法轉換爲android.view.ViewGroup](https://stackoverflow.com/questions/43785328/java-lang-classcastexception-android-inputmethodservice -keyboardview-can not-be) – Codexer

+0

發佈您的R.layout.keyboard xml –

回答

1

只需更換R.layout.keyboard xml文件中的到CustomKeyboardView

+1

非常感謝您匹配,我無法投票您回答沒有足夠的聲望,非常感謝您匹配 –

+0

@MukhtarBimurat如果它可以幫助您,請接受回答 - https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work –

+1

對不起,學習使用stackoverflow –

相關問題