1

我在 android 中有一个自定义虚拟键盘​​,当单击按钮时会出现。

如果我keyPreviewLayout使用语句设置 aandroid:keyPreviewLayout="@layout/mykeypreviewlayout" 并在运行时包含一些布局语句res/layout/mykeypreviewlayout.xml,当触摸自定义软键盘上的键时,应用程序崩溃。

以下是代码片段: 以下来自主 xml 文件。

  <LinearLayout android:layout_height="wrap_content"
  android:layout_gravity="bottom"  
  android:layout_width="wrap_content">  
  <android.inputmethodservice.KeyboardView  
    android:id="@+id/keyboardView" android:visibility="gone"
    android:focusable="true" android:focusableInTouchMode="true"
    android:layout_height="wrap_content" android:layout_width="wrap_content"  
    android:keyPreviewLayout="@layout/mykeypreviewlayout"
    android:layout_weight="0" />
  </LinearLayout> 

这是来自'res/layout/mykeypreviewlayout.xml的xml代码

    <TextView xmlns:android="http://schemas.android.com/apk/res/android"
        android:textColor="@color/black"> </TextView>

如果从上面的 KeyboardView 布局中删除了设置 keyPreviewLayout attr 的行,则应用程序可以正常运行。但是,当在按下的字符上方弹出按键反馈预览窗口时,窗口是空白的,并且没有字符显示——只是出现了一个白色背景的小矩形字符大小的弹出窗口。
如果我添加设置 keyPreviewLayout 的行,那么当在软键盘上触摸一个键时应用程序崩溃。

这是来自 logcat 的堆栈跟踪转储(相关的前几行),表明崩溃发生在 KeyboardView.java

04-17 07:41:47.346: E/AndroidRuntime(11901): FATAL EXCEPTION: main
04-17 07:41:47.346: E/AndroidRuntime(11901): java.lang.NullPointerException
04-17 07:41:47.346: E/AndroidRuntime(11901):    at                     android.inputmethodservice.KeyboardView.showKey(KeyboardView.java:918)
04-17 07:41:47.346: E/AndroidRuntime(11901):    at     android.inputmethodservice.KeyboardView.access$100(KeyboardView.java:65)
04-17 07:41:47.346: E/AndroidRuntime(11901):    at      android.inputmethodservice.KeyboardView$1.handleMessage(KeyboardView.java:251)
04-17 07:41:47.346: E/AndroidRuntime(11901):    at     android.os.Handler.dispatchMessage(Handler.java:99)
04-17 07:41:47.346: E/AndroidRuntime(11901):    at     android.os.Looper.loop(Looper.java:123)
04-17 07:41:47.346: E/AndroidRuntime(11901):    at android.app.ActivityThread.main(ActivityThread.java:3683)
04-17 07:41:47.346: E/AndroidRuntime(11901):    at java.lang.reflect.Method.invokeNative(Native Method)
04-17 07:41:47.346: E/AndroidRuntime(11901):    at java.lang.reflect.Method.invoke(Method.java:507)
04-17 07:41:47.346: E/AndroidRuntime(11901):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
04-17 07:41:47.346: E/AndroidRuntime(11901):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)

有没有人遇到过这个问题?任何帮助,将不胜感激。谢谢

4

1 回答 1

5

您可以尝试将预览布局更改为以下内容:

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
          android:background="@android:color/white"
          android:textColor="@android:color/black"
          android:gravity="center"
          android:textSize="32sp" />

您不需要使用整个东西,只需将 textColor 字段更改为我上面的内容。它应该适合你。

于 2013-05-28T13:18:54.233 回答