【问题标题】:Android SoftKeyboard: Shiftkey to load another keyboad layoutAndroid 软键盘:Shift 键加载另一个键盘布局
【发布时间】:2016-07-15 22:27:15
【问题描述】:

我有两个文件,其中有 android KeyCodes:Qwerty.xmlnumbers.xml。在任何按 shift 键时,我都希望显示数字小键盘。

Java 类:

public class MyKeyboard extends InputMethodService
                        implements KeyboardView.OnKeyboardActionListener
{
    private KeyboardView kv;
    private Keyboard keyboard;
    private boolean caps = false;

    @Override
    public View onCreateInputView() {
        kv = (KeyboardView)getLayoutInflater().inflate(R.layout.keyboard, null);
        keyboard = new Keyboard(this, R.xml.qwerty);
        //keyboard = new Keyboard(this,R.xml.qwerty1);
        kv.setKeyboard(keyboard);
        kv.setOnKeyboardActionListener(this);
        return kv;
    }

    @Override
    public void onPress(int primaryCode) {
    }

    @Override
    public void onRelease(int primaryCode) {
    }

    @Override
    public void onKey(int primaryCode, int[] keyCodes) {
        InputConnection ic = getCurrentInputConnection();
        switch (primaryCode){
            case Keyboard.KEYCODE_DELETE:
                ic.deleteSurroundingText(1, 0);
                break;
            case Keyboard.KEYCODE_SHIFT:
                caps = !caps;
                keyboard.setShifted(caps);
                kv.invalidateAllKeys();
                break;
            case Keyboard.KEYCODE_DONE:
                ic.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_ENTER));
                break;
            default:
                char code = (char) primaryCode;
                if (Character.isLetter(code) && caps) {
                   code = Character.toUpperCase(code);
                }
                ic.commitText(String.valueOf(code), 1);
        }
    }

    @Override
    public void onText(CharSequence text) {
    }

    @Override
    public void swipeLeft() {
    }

    @Override
    public void swipeRight() {
    }

    @Override
    public void swipeDown() {
    }

    @Override
    public void swipeUp() {
    }
}

我可以从case Keyboard.KEYCODE_SHIFT 调用任何方法来加载numbers.xml 文件以显示数字键盘吗?

【问题讨论】:

    标签: java xml android-studio custom-keyboard


    【解决方案1】:

    尝试改变你的

                case Keyboard.KEYCODE_SHIFT:
                caps = !caps;
                keyboard.setShifted(caps);
                kv.invalidateAllKeys();
                break;
    

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

    或者在您的 qwerty.xml 中添加 shift 键码,例如。 -1 并将其添加到您的 java 类中

                case -1:
                keyboard = new Keyboard(this, R.xml.number);
                kv.setKeyboard(keyboard);
                kv.setOnKeyboardActionListener(this);
                break;
    

    【讨论】:

      【解决方案2】:

      编辑 Qwerty.xmlnumbers.xml 文件并将自定义 keyCode 分配给 shift 键。例如:shift键的keyCode为120000

      创建LatinKeyboard的实例:

      private LatinKeyboard numbersKeyboard;
      

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

      public void onKey(int primaryCode, int[] keyCodes) {
      .....
      
      if (primaryCode == 120000) {
          mInputView.setKeyboard(numbersKeyboard);
      }
      
      ...
      

      【讨论】:

        猜你喜欢
        • 2016-04-20
        • 2018-08-28
        • 1970-01-01
        • 1970-01-01
        • 2011-10-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多