Android EditText обнаружил введенные эмодзи - PullRequest
0 голосов
/ 15 января 2020

Я работаю над обнаружением смайликов в editText. Когда я ввожу смайлик в EditText, когда я делаю editText.getText (). ToString (), он возвращает строку без смайликов внутри. Когда я делаю editText.length (), длина также включает длину смайликов.

Я даже пытался добавить textWatcher в EditText, чтобы прочитать введенные символы.

      TextWatcher watch = new TextWatcher() {
          @Override
          public void beforeTextChanged(CharSequence s, int start, int count, int after) {

          }

          @Override
          public void onTextChanged(CharSequence s, int start, int before, int count) {
                  Log.i(" Print", " s= "+s);
          }

          @Override
          public void afterTextChanged(Editable s) {

          }
      };

Все то же самое, только символы, цифры, пробелы, знаки препинания можно увидеть, но никаких эмодзи.

  1. Я хочу понять, как Emoji присутствует в EditText. Хранятся ли эмоджи как ImageSpans или Unicode? Как определить, есть ли эмодзи внутри editText?

  2. Я также хочу сосчитать 1 смайлик, введенный как 1 символ. Идея здесь состоит в том, чтобы рассматривать каждый Emoji, введенный как 1 символ, поскольку разные эмодзи имеют разную длину.

1 Ответ

1 голос
/ 16 января 2020

Наконец я нашел ответ и поделился им с другими!

  1. Эмодзи / Символы разных языков, называемые графемами, сохраняются как Unicode.

  2. java .text.BreakIterator делает волхвы c , Передайте editText.getText (). ToString () функции ниже и получите длину.

import java.text.BreakIterator;

  int getGraphemeCount(String s) {
    BreakIterator boundary = BreakIterator.getCharacterInstance(Locale.ROOT);
    boundary.setText(s);
    boundary.first();
    int result = 0;
    while (boundary.next() != BreakIterator.DONE) {
      ++result;
    }
    return result;

  }

Пример: getGraphemeCount ("?‍?‍?‍??‍?‍ ?‍??‍?‍? 读写 汉字 学 中文 ") возвращает длину как 10.

...