Android- нетрадиционная клавиатура, смена текста на клавише

Я пытаюсь разработать нетрадиционную клавиатуру, мне нужно изменить текст в клавише, в зависимости от комбинации других нажатых клавиш. Как и в режиме просмотра кандидатов, но внутри клавиатуры, в одной клавише.

Интересно, могу ли я изменить текст на клавиатуре, или я могу использовать другой макет клавиатуры XML для клавиатуры.

Моя клавиатура основана на примере приложения Soft Keyboard и может быть использована по этой ссылке.

3 ответа

Вы можете использовать теги для своего просмотра, чтобы при нажатии на них можно было использовать механизм setTag /getTag.

private final View.OnClickListener myListener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (v.getTag() != null) {
                if (v.getTag() instanceof String) {
                    getCurrentInputConnection().commitText((String) v.getTag(), 1);
                } else {
                    Log.v(TAG, "(v.getTag() instanceof String) == false");
                }
            } else {
                Log.e(TAG, "(v.getTag() != null) == false");
            }
        }
    };

И пример XML ключа:

<Button
        android:id="@+id/aButton_N"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="2"
        android:tag="n"
        android:text="n"
        android:onClick="myListener"
        android:textAllCaps="false" />

Пример переделки:

Button myBt = (Button) findViewWithTag("n");
myBt.setTag("N");

Для всех других целей, помните, что "KeyboardView" является посредником. В вашем представлении вы можете добавить любой child из View, так что кнопки, ImageViews и т. д. будут работать.

Если вам нужно "изображение" (растровое изображение), которое использует KeyboardView, то вы можете "перерисовать" (переопределив onDrawn() функции) клавиатуры и внесите любые изменения, необходимые для клавиш или их раскладки...

Обращаем ваше внимание, что Keyboard, Keyboard.Key и т. Д. - все это облегчает скорость, низкое использование памяти и рисует "легкость". Изменяя компоновку, вы можете использовать с ней все, что угодно, поэтому ScrollViews / LinearLayouts / Framelayouts могут значительно упростить ваша программа /Views, но они используют немного больше памяти, проверьте, может ли ваша программа сделать этот выбор.

Редактировать:

Button объект, имеет несколько атрибутов. Его отображение текста является Stringиспользовать button.getText().toString() чтобы получить это. Тег - это "указатель" на Object любого типа.... если вы хотите записать текущий текст кнопки и использовать другую связанную систему, вы можете использовать следующее:

private final View.OnClickListener myListener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
           Button thisButton = (Button) v;
           getCurrentInputConnection().commitText(thisButton.getText().toString(), 1);
        }
    };

И чтобы изменить "содержание" кнопки:

Button aButton = (Button) findViewById(YOUR.ID.HERE);
aButton.setText("a new long string to replace the old value.");

И извините за плохой английский, если что-то трудно понять, пожалуйста, дайте мне знать

Вы можете получить все ключи, как это

List<Keyboard.Key> keys = mKeyboardView.getKeyboard().getKeys();

В случае необходимости вы можете изменить значок или метку клавиши, проверьте Keyboard.Key.

Вы можете попробовать использовать android:keyboardMode доступны как часть Keyboard.Rowон выборочно отображает строки в зависимости от режима, в котором вы находитесь. Таким образом, вы можете создавать несколько режимов с разными строками (ключи с разными значениями и функциями).

Вот ссылка для справки.

Другие вопросы по тегам