android软键盘:shiftkey加载另一个键盘布局

cu6pst1q  于 2021-07-13  发布在  Java
关注(0)|答案(2)|浏览(396)

我有两个文件,其中有android键码: Qwerty.xml 以及 numbers.xml . 在任何按下shift键时,我都希望显示数字键盘。

java类:

  1. public class MyKeyboard extends InputMethodService
  2. implements KeyboardView.OnKeyboardActionListener
  3. {
  4. private KeyboardView kv;
  5. private Keyboard keyboard;
  6. private boolean caps = false;
  7. @Override
  8. public View onCreateInputView() {
  9. kv = (KeyboardView)getLayoutInflater().inflate(R.layout.keyboard, null);
  10. keyboard = new Keyboard(this, R.xml.qwerty);
  11. //keyboard = new Keyboard(this,R.xml.qwerty1);
  12. kv.setKeyboard(keyboard);
  13. kv.setOnKeyboardActionListener(this);
  14. return kv;
  15. }
  16. @Override
  17. public void onPress(int primaryCode) {
  18. }
  19. @Override
  20. public void onRelease(int primaryCode) {
  21. }
  22. @Override
  23. public void onKey(int primaryCode, int[] keyCodes) {
  24. InputConnection ic = getCurrentInputConnection();
  25. switch (primaryCode){
  26. case Keyboard.KEYCODE_DELETE:
  27. ic.deleteSurroundingText(1, 0);
  28. break;
  29. case Keyboard.KEYCODE_SHIFT:
  30. caps = !caps;
  31. keyboard.setShifted(caps);
  32. kv.invalidateAllKeys();
  33. break;
  34. case Keyboard.KEYCODE_DONE:
  35. ic.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_ENTER));
  36. break;
  37. default:
  38. char code = (char) primaryCode;
  39. if (Character.isLetter(code) && caps) {
  40. code = Character.toUpperCase(code);
  41. }
  42. ic.commitText(String.valueOf(code), 1);
  43. }
  44. }
  45. @Override
  46. public void onText(CharSequence text) {
  47. }
  48. @Override
  49. public void swipeLeft() {
  50. }
  51. @Override
  52. public void swipeRight() {
  53. }
  54. @Override
  55. public void swipeDown() {
  56. }
  57. @Override
  58. public void swipeUp() {
  59. }
  60. }

有什么方法可以调用吗 case Keyboard.KEYCODE_SHIFT 为了加载 numbers.xml 要显示数字键盘的文件?

xv8emn3q

xv8emn3q1#

试着改变你的想法

  1. case Keyboard.KEYCODE_SHIFT:
  2. caps = !caps;
  3. keyboard.setShifted(caps);
  4. kv.invalidateAllKeys();
  5. break;

  1. case Keyboard.KEYCODE_SHIFT:
  2. keyboard = new Keyboard(this, R.xml.numbers);
  3. kv.setKeyboard(keyboard);
  4. kv.setOnKeyboardActionListener(this);
  5. break;

或者将shift-keycode添加到qwerty.xml中,并将其添加到java类中

  1. case -1:
  2. keyboard = new Keyboard(this, R.xml.number);
  3. kv.setKeyboard(keyboard);
  4. kv.setOnKeyboardActionListener(this);
  5. break;
展开查看全部
44u64gxh

44u64gxh2#

编辑两者 Qwerty.xml 以及 numbers.xml 文件并为shift键指定自定义键代码。例如:shift键的键码为 120000 .
举一反三 LatinKeyboard :

  1. private LatinKeyboard numbersKeyboard;

并为以下方法添加逻辑( SoftKeyboard.java ):

  1. public void onKey(int primaryCode, int[] keyCodes) {
  2. .....
  3. if (primaryCode == 120000) {
  4. mInputView.setKeyboard(numbersKeyboard);
  5. }
  6. ...

相关问题