-1

私はアンドロイドでカスタムキーボードの実装に取り​​組んでいます。これまでのところ、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が、これはどういう意味ですか?

助言がありますか?

4

2 に答える 2

0

Keyboard.Row で利用可能な ctor を見てください。親の Keyboard オブジェクトがなければ、これらのオブジェクトのいずれかをインスタンス化することはできません。このエラーは、呼び出されているコンストラクターをクラス ローダーが見つけられないために発生します。

問題を解決するには、キーボードにあるものを囲むだけです。

于 2012-06-20T22:59:14.630 に答える
0

どうやら、これは無効なキーボード ファイルのようです。JavaDocs forKeyboardは、次のようなサンプルを示しています。

<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 を表示します。ルートKeyboard要素、ネストされたRow要素、およびKeyそれらの内部の要素です。

SDK サンプルから始めて、そこから変更することをお勧めします。

于 2012-06-20T20:55:28.510 に答える