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
он выборочно отображает строки в зависимости от режима, в котором вы находитесь. Таким образом, вы можете создавать несколько режимов с разными строками (ключи с разными значениями и функциями).
Вот ссылка для справки.