java.lang.ClassCastException:android.inputmethodservice.KeyboardView无法强制转换为android.view.ViewGroup

时间:2017-05-04 14:13:07

标签: android android-softkeyboard custom-keyboard

我在尝试在键盘视图中使用其他布局时遇到此错误,就像在我的xml文件中一样。我不希望我的键盘布局像普通键盘一样有行和键,而我希望它在任何父布局的顶部两侧都有两个按钮。另外,我需要键盘视图中的布局来包含我的绘图画布。

我也尝试过这样的布局:

<?xml version="1.0" encoding="utf-8"?>
<android.inputmethodservice.KeyboardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/keyboard"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:keyBackground="@drawable/square_rounded"
    android:background="#ffffff">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:id="@+id/mainLinearLayout">

    <RelativeLayout
        android:id="@+id/keyboardLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <Button
            android:layout_width="100dp"
            android:layout_height="50dp"
            android:text="Cancel"
            android:layout_alignParentLeft="true">
        </Button>

        <Button
            android:layout_width="100dp"
            android:layout_height="50dp"
            android:text="Done"
            android:layout_alignParentRight="true">
        </Button>

        <LinearLayout
            android:layout_alignParentTop="true"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

        </LinearLayout>
    </RelativeLayout>
</LinearLayout>
</android.inputmethodservice.KeyboardView>

然后尝试加载它:

       kv = (KeyboardView)getLayoutInflater()
        .inflate(R.layout.draw_signature, null);
        kv.setOnKeyboardActionListener(this);
        kv.setPreviewEnabled(false);
        return kv;

任何帮助或教程链接都将不胜感激。

1 个答案:

答案 0 :(得分:1)

您收到错误是因为KeyboardView扩展了View,它不能包含像ViewGroup这样的子项。

为了使其工作,您需要使用键盘布局创建单独的布局文件,然后将其添加到KeyboardView,如下所示:

<android.inputmethodservice.KeyboardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/keyboard"
    ...
    android:keyPreviewLayout ="@layout/your_keyboard_layout">

有关如何自定义键盘的完整教程:https://code.tutsplus.com/tutorials/create-a-custom-keyboard-on-android--cms-22615