Отключить один ключ на пользовательской клавиатуре на Android

У меня есть пользовательская клавиатура в моем приложении для 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+ – и вы получите красивые современные прозрачные кнопки и прозрачный макет на каждой платформе.

В настоящее время я использую android:horizontalGap чтобы поместить черный пробел (с шириной ключа) в место, где должен быть установлен отключенный ключ (таким образом, я могу скрыть клавиши, которые не разрешены на каждом экране, потому что моя клавиатура всегда То же распределение). Однако это плохой способ обхода.

Основная проблема заключается в использовании самых правых клавиш, так как android:horizontalGap может быть установлен только для левой стороны ключа. Но используя android:keyWidth="0" в android:keyWidth="0" правом фальшивом ключе, а затем установив правильный android:horizontalGap , делает трюк. Еще худшее обходное решение …

Любое лучшее решение?

Обычно клавиатура видна только в том случае, если вы что-то редактируете, чтобы вы могли уловить изменения через объект. Если это поле 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; } }); 

Если клавиша – кнопка, то это просто:

 key.setEnabled(false); 

В противном случае просто сделайте его неактивным:

 key.setClickable(false); 

… и изменить его внешний вид (цвет фона, цвет текста и т. Д.). Самый простой способ сделать это:

 key.setBackgroundColor("0xFFAAAAAA");