Почему текст для вывода клавиш не работает на моей клавиатуре?

#android #input #keyboard #android-softkeyboard

Вопрос:

Я новичок в разработке Android. Я пытаюсь сделать пользовательскую клавиатуру. Я хочу, чтобы при нажатии на букву «D»было несколько вариантов написания. Например, D ‘. Я попытался использовать android: popupKeyboard = «@ xml / всплывающее окно» <Ключ android: Метка ключа = «D» android: keyOutputText = «D ‘/>. Клавиатура работает, правильно отображает символы. Но не записывает их на экран. Ошибка W / InputEventReceiver : Попытка завершить событие ввода, но приемник событий ввода уже удален. Я понимаю, что вопрос может оказаться очень простым, но это мой первый опыт, и я просто не знаю, где искать ответ.

 <Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
android:keyWidth="10%p"
android:horizontalGap="0px"
android:verticalGap="0px"
android:keyHeight="60dp"
android:layout_height="wrap_content"
android:layout_width="wrap_content">
<Row>
    <Key android:codes="49" android:keyLabel="1" android:keyEdgeFlags="left"/>
    <Key android:codes="1076" android:keyLabel="д" android:popupKeyboard="@xml/popup"/>
    <Key android:codes="51" android:keyLabel="3"/>
    <Key android:codes="52" android:keyLabel="4"/>
    <Key android:codes="53" android:keyLabel="5"/>
    <Key android:codes="54" android:keyLabel="6"/>
    <Key android:codes="55" android:keyLabel="7"/>
    <Key android:codes="56" android:keyLabel="8"/>
    <Key android:codes="57" android:keyLabel="9"/>
    <Key android:codes="48" android:keyLabel="0" android:keyEdgeFlags="right"/>
</Row>

<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
android:keyWidth="15%p"
android:horizontalGap="0px"
android:verticalGap="0px"
android:keyHeight="60dp"
>

<Row android:rowEdgeFlags="top">
    <Key android:keyLabel="Д' " android:keyOutputText="Д'"/>
    <Key android:keyLabel="D " android:keyOutputText="D "/>
</Row>
 
 package com.example.nakeyboard;
import android.inputmethodservice.InputMethodService;
import android.inputmethodservice.Keyboard;
import android.inputmethodservice.KeyboardView;
import android.text.TextUtils;
import android.view.KeyboardShortcutGroup;
import android.view.View;
import android.view.inputmethod.InputConnection;

public class Myinput extends InputMethodService implements KeyboardView.OnKeyboardActionListener {


    @Override
    public View onCreateInputView () {
        KeyboardView keyboardView = (KeyboardView) getLayoutInflater().inflate(R.layout.keyboard_view, null);
        Keyboard keyboard = new Keyboard( this, R.xml.number_pad);
        keyboardView.setKeyboard(keyboard);
        keyboardView.setOnKeyboardActionListener(this);
        return keyboardView;


    }

    @Override
    public void onPress(int primaryCode) {

    }

    @Override
    public void onRelease(int primaryCode) {

    }

    @Override
    public void onKey(int primaryCode, int[] keyCodes) {
        InputConnection inputConnectionc = getCurrentInputConnection();

        if (inputConnectionc!=null) {
            switch (primaryCode) {
                case Keyboard.KEYCODE_DELETE:
                CharSequence selectedText = inputConnectionc.getSelectedText(0);
                if (TextUtils.isEmpty(selectedText)) {
                    inputConnectionc.deleteSurroundingText(1, 0);
                } else {
                    inputConnectionc.commitText("", 1);
                }
                    break;
                default:
                    char code = (char) primaryCode;
                    inputConnectionc.commitText(String.valueOf(code),1);

            }
        }
    }

    @Override
    public void onText(CharSequence text) {

    }

    @Override
    public void swipeLeft() {

    }

    @Override
    public void swipeRight() {

    }

    @Override
    public void swipeDown() {

    }

    @Override
    public void swipeUp() {

    }
}`




 

Комментарии:

1. Я обнаружил, что программа не может отображать строковые значения. Я думаю, что в этом и заключается проблема.