2013-12-16 3 views
3

Ниже приведен код, который я использую, чтобы добавить OnKeyboardActionListener в мой KeyboardView. (Для краткости я опустил необходимые переопределены методы, которые я оставил пустым.)Отключение сдвига после ввода клавиши

keyboardView.setOnKeyboardActionListener(new OnKeyboardActionListener() { 

    private void shiftOn(boolean on) { 
     System.out.println("Shifting " + (on ? "on" : "off")); 
     keyboard.setShifted(on); 
     shiftKey.icon = keyboard.isShifted() ? shiftLockDrawable : shiftDrawable; 
    } 

    @Override 
    public void onKey(int primaryCode, int[] keyCodes) { 

     Editable editable = editText.getEditableText(); 
     int selectionStart = editText.getSelectionStart(); 

     if (primaryCode == SHIFT) { 
      shiftOn(!keyboard.isShifted()); 
     } else { 
      if (primaryCode == DELETE) { 
       if (editable != null && selectionStart > 0) { 
        editable.delete(selectionStart - 1, selectionStart); 
       } 
      } else { 
       editable.insert(selectionStart, Character.toString((char) primaryCode)); 
      } 

      shiftOn(false); 
     } 
    } 
}); 

Проблема

Когда я нажму клавишу, все идет, как ожидалось; как значок ключа, так и состояние «смещения».

Однако, когда я нажимаю любую другую клавишу (которая, как предполагается, отключается), состояние смещения изменяется на выключение, но значок не изменяется на неперемещенную версию. Я испытываю ту же проблему при использовании текста вместо значков.

Я пробовал звонить postInvalidate() на моем KeyboardView, но безрезультатно.

Вот video, который подчеркивает мою проблему.

+0

является ваш метод shiftOn() работает. Я имею в виду, что вы получаете журнал Shifting On/Off? –

ответ

1

Я добавил следующий код в конце метода shiftOn:

keyboard.invalidateKey(SHIFT); 
-1

Я думаю, что есть проблема в shiftOn(). Я не знаю точно, что делать shiftLockDrawable и shiftDrawable, но, возможно, следующий код работает

private void shiftOn(boolean on) { 
    System.out.println("Shifting " + (on ? "on" : "off")); 
    shiftKey.icon = (on ? shiftLockDrawable : shiftDrawable); 
    keyboard.setShifted(on); 
} 

Если это не работает, или если это не то, что вы хотите, вы могли бы, возможно, предоставить более подробную информацию?

+0

shiftLockDrawable - это значок, когда сдвиг включен, а shiftDrawable - это значок, когда сдвиг выключен. Это не устранило проблему, хотя, вероятно, лучше использовать переменную 'on', как вы делали, а не' isShifted() '. –

+0

Я проверил тест, используя 'shiftDrawable' и' shiftLockDrawable' как 'String'. Это работало нормально, поэтому ошибка не в этой части кода. Какой класс вы используете для значков? Я думаю, что этот класс не перерисовывает значок, который вы показывали в видео, хотя переменная изменилась. У класса значка есть метод перерисовывания? Если это не проблема, вы пробовали шаг за шагом отлаживать? Современные Java IDE, такие как Netbeans и Eclipse, дают вам возможность отлаживать вашу программу. –

+0

Это объекты, пригодные для рисования –

0

Мне кажется, что перерисовка клавиши сдвига привязана к фактическому входному событию. Можете ли вы вместо изменения shiftKeyIcon имитировать нажатие клавиши shift в коде? Вы просто генерируете дополнительное нажатие клавиши при нажатии другой клавиши.

Надеюсь, это вам поможет.

+0

Я думал о симуляции симуляции в качестве возможности, но как бы мне это сделать? Я не вижу такого метода ни в одном из классов, которые могут быть использованы. –

Смежные вопросы