2016-02-25 3 views
0

Я пытаюсь реализовать emojis таким образом, чтобы автоматически заменять такие вещи, как «:)» их эквивалентом emoji. И я не совсем уверен, как это сделать, я нашел таблицу смайликов UTF-кодов, но я не уверен, о том, как я должен программно поместить их в EditText:/Android вставить emoji programatically

inputField=(EditText)temp.findViewById(R.id.inputField); 
    inputField.addTextChangedListener(new TextWatcher() { 
     boolean justChanged=false; 
     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

     } 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 
      if(justChanged) { 
       justChanged=false; 
       return; 
      } 
      Log.d(s.toString(), s.toString()); 
      if(s.toString().contains(":)")) { 
       justChanged=true; 
       inputField.setText(s.toString().replace(":)", "UTF CODE HERE?")); 
      } 
     } 

     @Override 
     public void afterTextChanged(Editable s) { 

     } 
    }); 

Многие благодаря!

+0

Если ваш текущий подход, указанный здесь, не работает, объясните, что он делает неправильно. –

+1

Это не значит, что он «не работает», я просто не могу понять, как поместить коды emoji в переменную String:/Мне нужен пример, потому что просто вставка его там дает точный код как обычный текст –

+0

Вы пробовали это: http://stackoverflow.com/a/8854437/1510063? –

ответ

2

Самый простой способ - это кодировать исходный код как UTF-8 и вставлять желаемый эмози в код. Затем вам необходимо будет пройти -encoding UTF-8 до javac. Затем emoji преобразуется в точку Unicode при компиляции.

E.g.

inputField.setText(s.toString().replace(":)", "")); 

В качестве альтернативы, вы можете использовать UTF-16 точек литералов Unicode в Java строк, используя \uXXXX обозначения. С соответствующего сайта ссылок Unicode, такого как http://www.fileformat.info/info/unicode/block/emoticons/list.htm, вы можете получить кодировку типа UTF-16 или полную escape-последовательность Java.

E.g.

inputField.setText(s.toString().replace(":)", "\uD83D\uDE00")); 
+0

ссылка, которую вы указали, не является полным списком emojis .., не так ли? – eRaisedToX

+0

Я пробовал код выше, не работает. Просто отправляет: «\ uD83D \ uDE00» вместо «:)». Это абсолютно не отвечает на вопрос. Нехорошо, если получатель получает строку из этого: «\ uD83D \ uDE00». Существует серьезная нехватка ясности и открытости, окружающих эможи. Это не должно быть сложно, мы не пытаемся изменить внешний вид эможи, так почему это невозможно сделать? – JamisonMan111

+0

Что значит «он просто отправляет»? Ответ показывает два способа размещения emojis в исходном коде. Какой из них вы используете? –