Подтвердить что ты не робот

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

4b9b3361

Ответ 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");