Android自定义键盘Row类未找到异常

时间:2012-06-20 20:47:28

标签: java android

我正在研究android中的自定义键盘实现。 到目前为止,我已将我的键盘布局声明为xml文件:

<android.inputmethodservice.Keyboard.Row>
    <Key android:codes="113" android:keyLabel="q" android:keyEdgeFlags="left"/>
    <Key android:codes="119" android:keyLabel="w"/>
    <Key android:codes="101" android:keyLabel="e"/>
    <Key android:codes="114" android:keyLabel="r"/>
    <Key android:codes="116" android:keyLabel="t"/>
    <Key android:codes="121" android:keyLabel="y"/>
    <Key android:codes="117" android:keyLabel="u"/>
    <Key android:codes="105" android:keyLabel="i"/>
    <Key android:codes="111" android:keyLabel="o"/>
    <Key android:codes="112" android:keyLabel="p" android:keyEdgeFlags="right"/>
</android.inputmethodservice.Keyboard.Row>

当我尝试给这个布局充气时,我收到以下错误:

E/AndroidRuntime( 4775): FATAL EXCEPTION: main
E/AndroidRuntime( 4775): android.view.InflateException: Binary XML file line #9: Error inflating class android.inputmethodservice.Keyboard.Row
E/AndroidRuntime( 4775):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:581)
E/AndroidRuntime( 4775):    at android.view.LayoutInflater.rInflate(LayoutInflater.java:623)
E/AndroidRuntime( 4775):    at android.view.LayoutInflater.inflate(LayoutInflater.java:408)
E/AndroidRuntime( 4775):    at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
E/AndroidRuntime( 4775):    at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
E/AndroidRuntime( 4775):    at com.mykeyboard.MyKeyboardService.onCreateInputView(MyKeyboardService.java:23)
E/AndroidRuntime( 4775):    at android.inputmethodservice.InputMethodService.updateInputViewShown(InputMethodService.java:967)
E/AndroidRuntime( 4775):    at android.inputmethodservice.InputMethodService.showWindowInner(InputMethodService.java:1320)
E/AndroidRuntime( 4775):    at android.inputmethodservice.InputMethodService.showWindow(InputMethodService.java:1295)
E/AndroidRuntime( 4775):    at android.inputmethodservice.InputMethodService$InputMethodImpl.showSoftInput(InputMethodService.java:398)
E/AndroidRuntime( 4775):    at android.inputmethodservice.IInputMethodWrapper.executeMessage(IInputMethodWrapper.java:176)
E/AndroidRuntime( 4775):    at com.android.internal.os.HandlerCaller$MyHandler.handleMessage(HandlerCaller.java:61)
E/AndroidRuntime( 4775):    at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime( 4775):    at android.os.Looper.loop(Looper.java:130)
E/AndroidRuntime( 4775):    at android.app.ActivityThread.main(ActivityThread.java:3703)
E/AndroidRuntime( 4775):    at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 4775):    at java.lang.reflect.Method.invoke(Method.java:507)
E/AndroidRuntime( 4775):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
E/AndroidRuntime( 4775):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
E/AndroidRuntime( 4775):    at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime( 4775): Caused by: java.lang.ClassNotFoundException: android.inputmethodservice.Keyboard.Row in loader dalvik.system.PathClassLoader[/data/app/com.mykeyboard-2.apk]
E/AndroidRuntime( 4775):    at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
E/AndroidRuntime( 4775):    at java.lang.ClassLoader.loadClass(ClassLoader.java:551)
E/AndroidRuntime( 4775):    at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
E/AndroidRuntime( 4775):    at android.view.LayoutInflater.createView(LayoutInflater.java:471)
E/AndroidRuntime( 4775):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:570)
E/AndroidRuntime( 4775):    ... 19 more

看起来找不到android.inputmethodservice.Keyboard.Row in loader dalvik.system.PathClassLoader,但这是什么意思?

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

关闭袖口,这似乎是一个无效的键盘文件。 Keyboard的JavaDocs显示如下示例:

<Keyboard
         android:keyWidth="%10p"
         android:keyHeight="50px"
         android:horizontalGap="2px"
         android:verticalGap="2px" >
     <Row android:keyWidth="32px" >
         <Key android:keyLabel="A" />
         ...
     </Row>
     ...
</Keyboard>

而且,SDK中的SoftKeyboard应用程序显示了类似方式的XML:root Keyboard元素,其中包含嵌套的Row元素和Key个元素。

您可能希望从SDK示例开始并从那里进行修改。

答案 1 :(得分:0)

查看Keyboard.Row的可用ctors。没有父Keyboard对象,您无法实例化其中一个对象。该错误是因为类加载器找不到正在调用的构造函数。

要解决您的问题,请将您在键盘中的内容包围起来。