1

我正在开发 Android 自定义键盘。我在执行此操作时导入android.view.inputmethod.InputMethodSubtype了我的代码,我收到一条错误消息,例如无法解决导入的错误消息。是否有任何我需要安装的 Eclipse 插件,据我所知,Android 版本 1.6 以上将支持 IMF。

4

1 回答 1

0

这个问题很老,但我正在回答它,因为它可能会帮助另一个看到这个问题的用户。

OP 询问是否有任何 Eclipse 插件可以安装以解决该问题,但现在我们有了 Android Studio。

对于那些想要实现Android 自定义键盘的人:首先,下载 Android 自定义键盘的谷歌示例项目开始。

有三个重要功能可以决定您想要哪一个:1) 主题(自定义布局)、2) 子类型和 3) 表情符号。

对于主题/布局:创建布局文件。请参见下面的示例代码:

<com.domain.keyboard.android.LatinKeyboardView 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:background="@drawable/kb_bg_9"
    android:keyBackground="@drawable/key_bg_fill_white"
    android:keyPreviewLayout="@layout/key_preview_layout"
    android:keyPreviewOffset="@dimen/keyPreviewOffset"
    android:keyTextColor="@color/white"
    android:popupLayout="@layout/keyboard_popup_layout" />

并在中使用以下代码SoftKeyboard.java

@Override
public View onCreateInputView() {

    // Set custom theme to input view.
    int themeLayout = sharedPreferences.getInt(THEME_KEY, R.layout.input_1);
    mInputView = (LatinKeyboardView) getLayoutInflater().inflate(
            themeLayout, null);
    mInputView.setOnKeyboardActionListener(this);

    // Close popup keyboard when screen is touched, if it's showing
    mInputView.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {
            if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
                mInputView.closing();
            }
            return false;
        }
    });

    // Apply the selected keyboard to the input view.
    setLatinKeyboard(getSelectedSubtype());

    return mInputView;
}

对于子类型:创建副本qwerty.xml并对其进行编辑以替换键。LatinKeyboard创建另一个inSoftKeyboard.java和 use ifor switchlogic的实例。

private LatinKeyboard getSelectedSubtype() {
    final InputMethodSubtype subtype = mInputMethodManager.getCurrentInputMethodSubtype();
    String s = subtype.getLocale();
    switch (s) {
        case "ps_AF":
            mActiveKeyboard = mPashtoKeyboard;
            mCurKeyboard = mPashtoKeyboard;
            break;
        case "fa_AF":
            mCurKeyboard = mFarsiKeyboard;
            break;
        default:
            mCurKeyboard = mQwertyKeyboard;
    }

    return mCurKeyboard;
}

并编辑methods.xml以添加子类型:

<input-method xmlns:android="http://schemas.android.com/apk/res/android"
    android:settingsActivity="com.sunzala.afghankeyboard.android.ImePreferences"
    android:supportsSwitchingToNextInputMethod="true">
    <subtype
        android:imeSubtypeLocale="en_US"
        android:imeSubtypeMode="keyboard"
        android:label="@string/label_subtype_generic" />
    <subtype
        android:imeSubtypeLocale="ps_AF"
        android:imeSubtypeMode="keyboard"
        android:label="@string/label_subtype_generic" />
    <subtype
        android:imeSubtypeLocale="fa_AF"
        android:imeSubtypeMode="keyboard"
        android:label="@string/label_subtype_generic" />
</input-method>

对于表情符号:查找库并将其与键盘集成。表情符号将通过按键显示。

if (primaryCode == -10000) {
    showEmoticons();
}

-10000键码在哪里。

于 2017-09-27T22:57:15.653 回答