Отключить один ключ на пользовательской клавиатуре на Android
У меня есть пользовательский keyboard в моем приложении для Android. Это расположение, описанное в xml, как это
<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"">
<Row>
<Key android:keyLabel="F1" android:keyOutputText="F1"/>
<Key android:keyLabel="F2" android:keyOutputText="F2"/>
<Key android:keyLabel="F3" android:keyOutputText="F3"/>
...
Итак, я инстенсивный, как я могу отключить, например, 'f1' key ~ сделать его серым и неприкасаемым.
Здесь есть несколько подобных вопросов, но все о программном обеспечении по умолчанию soft-KB.
Я знаю, что могу выполнять итерацию через такие клавиши
for (Keyboard.Key key : myKeyboard.getKeys())
но они выглядят как объекты класса Keyboard.Key, бесполезны для любых изменений в ключевом образе.
UPD: я не нашел решение. Я реализовал клавиатуру вручную - большой относительный макет, обычные кнопки и пользовательские кнопки и все в порядке. Кстати - пользовательская клавиатура хотя бы красивее. Просто скопируйте ресурсы из droid 4+ - и вы получите красивые современные прозрачные кнопки и прозрачный макет на каждой платформе.
Ответы
Ответ 1
В настоящее время я использую android:horizontalGap
, чтобы поместить черный пробел (с шириной ключа) в место, где должен быть установлен отключенный ключ (таким образом, я могу скрывать ключи, которые не разрешены на каждом экране, потому что мой клавиатура всегда имеет один и тот же дистрибутив). Однако это плохой способ.
Основная проблема заключается в использовании самых правых клавиш, так как android:horizontalGap
можно установить только для левой стороны клавиши. Но используя атрибут android:keyWidth="0"
в самом правом фальшивом ключе, а затем установите правильный android:horizontalGap
, делает трюк. Еще худшее обходное решение...
Лучшее решение?
Ответ 2
Обычно клавиатура видна только в том случае, если вы что-то редактируете, поэтому вы можете замаскировать редактирование через объект. Если это поле editText, вы можете добавить слушателя, а затем вы можете отключить любой ответ на текст редактирования. Я не уверен, что это полезно для вас, но по крайней мере вы можете поймать любой нежелательный вход.
// add a keylistener to keep track user input
editText.setOnKeyListener(new View.OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
// if keydown and "enter" is pressed
if ((event.getAction() == KeyEvent.ACTION_DOWN)
&& (keyCode == KeyEvent.KEYCODE_ENTER)) {
// do some thing or nothing
return true;
}
return false;
}
});
Ответ 3
Если клавиша - это кнопка, то она проста:
key.setEnabled(false);
В противном случае просто сделайте его не интерактивным:
key.setClickable(false);
... и изменить его внешний вид (цвет фона, цвет текста и т.д.). Самый простой способ сделать это:
key.setBackgroundColor("0xFFAAAAAA");