【问题标题】:Android keyboard implementing backspace with emojis使用表情符号实现退格的 Android 键盘
【发布时间】:2017-05-26 04:24:39
【问题描述】:

我已经实现了一个带有内置表情符号键盘的 android 软键盘。

我的问题是退格按钮,当我删除一个字符时它没问题,但是当我删除一个表情符号时它做得不好。 代码:

  final EmojiconsPopup popup = new EmojiconsPopup(kv.getRootView(), this);
    popup.setSizeForSoftKeyboard();
    popup.setOnEmojiconBackspaceClickedListener(new EmojiconsPopup.OnEmojiconBackspaceClickedListener() {
        @Override
        public void onEmojiconBackspaceClicked(View v) {
            InputConnection ic = getCurrentInputConnection();
            ic.deleteSurroundingText(1, 0);
        }
    });

如果我将行改为

ic.deleteSurroundingText(2, 0);

emojis 删除得很好,但是chars 会一次删除两个。

关于如何解决这个问题的任何想法?

更新

经过一番调查,我发现一些表情符号是一个字符(如普通字母)和一些两个字符,关于如何区分它们有什么想法吗?

【问题讨论】:

  • 如何检查被删除的字符/表情符号并相应地使用ic.deleteSurroundingText()
  • 这就是我想要做的,我设法得到了最后一个字符,但我怎么知道它是否是表情符号?
  • 你可以试试这个answer,你可以拆分字符串的最后两个字符,检查它是否匹配正则表达式,然后相应地删除它。
  • 设法用stackoverflow.com/q/41609277/7079340解决了这个问题

标签: android keyboard android-softkeyboard


【解决方案1】:

试试这个, 使用 Charactor.isSurrogate 检查它是否是表情符号

CharSequence c = inputConnection.getTextBeforeCursor(1, 0);
if(c.length() > 0 && Character.isSurrogate(c.charAt(0))){
        KeyEvent keyEventDown = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL);
        inputConnection.sendKeyEvent(keyEventDown);
        return;
}

【讨论】:

  • 这不适用于所有现有的表情符号,仅适用于基本表情符号。对于其他表情符号,仍然需要按 2-4 个退格键才能删除它们
猜你喜欢
  • 1970-01-01
  • 2014-09-29
  • 1970-01-01
  • 2017-09-11
  • 2021-05-29
  • 2015-10-16
  • 2014-04-20
  • 1970-01-01
  • 2015-11-23
相关资源
最近更新 更多