如何使用"android:inputMethod"属性?



我需要使用自定义输入方法对我的应用程序中的特定编辑文本。

输入方法成功使用所有应用程序(当我从系统菜单中选择它时)。因此,该方法都可以。

但是,当我试图明确强制使用它时:

<EditText
    android:id="@+id/edit"
    android:inputMethod="tx.android.softkeyboard.TXSoftKeyboard"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

它触发classNotFoundException

Caused by: java.lang.ClassNotFoundException: tx.android.softkeyboard.TXSoftKeyboard
        at java.lang.Class.classForName(Native Method)
        at java.lang.Class.forName(Class.java:400)
        at java.lang.Class.forName(Class.java:326)
        at android.widget.TextView.<init>(TextView.java:1233)
        at android.widget.EditText.<init>(EditText.java:64) 

类Tx.android.softkeyboard.txsoftkeyboard当然存在。

在另一个主题中,用户m0skit0报告了类似的行为,但没有解决方案。

我已经在AOSP中检查了,在TextView中,您可以清楚地看到属性的值未修改(很容易遵循,在第1034行中获取属性,然后使用后来使用在以下代码中):

    if (inputMethod != null) {
        Class<?> c;
        try {
            c = Class.forName(inputMethod.toString());
        } catch (ClassNotFoundException ex) {
            throw new RuntimeException(ex);
        }
        try {
            createEditorIfNeeded();
            mEditor.mKeyListener = (KeyListener) c.newInstance();
        } catch (InstantiationException ex) {
            throw new RuntimeException(ex);
        } catch (IllegalAccessException ex) {
            throw new RuntimeException(ex);
        }
        try {
            mEditor.mInputType = inputType != EditorInfo.TYPE_NULL
                    ? inputType
                    : mEditor.mKeyListener.getInputType();
        } catch (IncompatibleClassChangeError e) {
            mEditor.mInputType = EditorInfo.TYPE_CLASS_TEXT;
        }
    }

因此,我们可以解决此问题的最接近的是调用TextView#setKeyListener()(基本上是该代码正在做的事情,请注意在加载mEditor.mKeyListener = (KeyListener) c.newInstance();后创建类实例之后的演员表。话虽如此,从我对这个话题的有限理解来看,KeyListener不是您要寻找的。

相关内容

  • 没有找到相关文章

最新更新