2013-04-16 2 views
1

У меня есть пользовательская виртуальная клавиатура в Android, которая появляется при нажатии кнопки.Настройка keyPreviewLayout для виртуальной клавиатуры Android приводит к сбою

Если я установил keyPreviewLayout с утверждением android: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> 

Вот XML-код из «Реза/макет/mykeypreviewlayout.xml

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

Если установка Аттрибута keyPreviewLayout линии удаляется из макета KeyboardView выше, то приложение работает нормально. Однако, когда окно предварительного просмотра обратной связи с нажатием клавиши появляется над нажатым символом, окно пустое, а символы не отображаются - появляется небольшое прямоугольное всплывающее окно с белым фоном.
Если я добавлю строку, устанавливающую keyPreviewLayout, приложение перестанет работать, когда к клавише коснется экранная клавиатура.

Вот дамп в StackTrace от 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

Вы можете попытаться изменить макет предварительного просмотра, чтобы что-то вроде этого:

<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 на то, что я выше. Это должно сработать для вас.

+0

Спасибо, это работает. я использовал все изменения выше. Попробуй только с вещами, связанными с цветом. я бы не заподозрил textColor в течение длительного времени! –