2012-06-20 2 views
-1

Я работаю над пользовательской реализацией клавиатуры в android. До сих пор я объявил мою раскладку клавиатуры в файле XML:Пользовательская клавиатура Android. Класс класса не найден.

<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, но что это значит?

Любые предложения?

ответ

0

Посмотрите на имеющиеся на рынке ключи для клавиатуры. Вы не можете создать экземпляр одного из этих объектов без родительского объекта Keyboard. Эта ошибка вызвана тем, что загрузчик классов не может найти вызывающий конструктор.

Чтобы устранить проблему, просто сравните с тем, что у вас есть на клавиатуре.

0

Наружная манжета, похожее на недопустимый файл клавиатуры. В JavaDocs для Keyboard показать образец, как это:

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

И, приложение SoftKeyboard в SDK показывает XML подобной моды: корень Keyboard элемент, с вложенными элементов и Key элементов внутри них.

Возможно, вы захотите начать с образца SDK и изменить его там.

+0

Я начал с этого файла, но это дает следующую ошибку. http://pastebin.com/rkwaUcMe Вызывает то же самое, не может найти класс, но почему он не может? – Wouter

+0

@Wouter: Попробуйте создать образец SDK SoftKeyboard целиком. Если это сработает, начните пытаться выяснить, что отличает ваше приложение от образца SDK. Если образец SDK не работает, у нас возникают большие проблемы ... :-) – CommonsWare

Смежные вопросы