Melhor resposta
Pessoalmente, meu teclado favorito no sistema Android é o teclado emoji gratuito.
  
Recursos do teclado emoji
Resposta inteligente
Previsão da palavra seguinte, previsão de emoji e previsão de rostos de texto , incluindo emoticons de texto feliz, bocejo e piscadela.
Temas gratuitos personalizados
Uma vasta coleção de temas de teclado gratuitos. Sempre haverá um para você em nosso centro de temas.
Crie seus próprios temas
Experimente e personalize seus próprios temas, por exemplo, alterar planos de fundo e papéis de parede com suas próprias fotos, alterar fontes, música (som), efeitos dinâmicos e a cor dos teclados.
Digitação multilíngue
O teclado emoji para Android suporta mais de 150 idiomas
  
Resposta
1. Integração simples
Abaixo está a sintaxe de uma integração simples para o teclado Emojis. O construtor EmojiIconActions aceita quatro parâmetros, Contexto , RootView , EmojiconEditText e ImageView . Normalmente, passar o layout pai como RootView é a melhor opção para mostrar o teclado Emojis acima de todas as visualizações. O EmojiconEditText é um EditText com mais atributos personalizados para ativar a renderização de emojis. E o último parâmetro que ImageView será usado para alternar entre o teclado normal e o teclado de emojis.
Para exibir emojis no TextView, usaremos EmojiconTextView que também é um TextView com mais atributos personalizados para permitir a renderização de emojis
  EmojIconActions emojIcon= new EmojIconActions(this, rootView, emojiconEditText,  
  emojiImageView);  
 emojIcon.ShowEmojIcon();  
Se desejar usá-lo no layout xml, usaremos EmojiconEditText em vez do EditText .
 
  android:id="@+id/emojicon\_edit\_text" 
  android:layout\_width="match\_parent" 
  android:layout\_height="wrap\_content" 
  emojicon:emojiconSize="28sp" /> 
E EmojiconTextView em vez de TextView
 
  android:id="@+id/emojicon\_text\_view" 
  android:layout\_width="wrap\_content" 
  android:layout\_height="wrap\_content" 
  emojicon:emojiconSize="28sp"/>  
  
2. Alterar o ícone de alternância padrão
Para alternar entre o teclado normal e o teclado emojis, você pode chamar o método setIconsIds () , que leva dois parâmetros, ID do ícone do teclado e ID do ícone sorridente .
 emojIcon.setIconsIds(R.drawable.ic\_action\_keyboard,R.drawable.smiley); 
  
3 – Usando emojis padrão do dispositivo
O SuperNove-Emoji permite que você use emojis do dispositivo de forma simples, você precisa definir o valor booleano de setUseSystemEmoji ) e setUseSystemDefault () métodos para TRUE em cada EmojiconTextView e EmojiconEditText que você usa para exibir os emojis.
 emojIcon.setUseSystemEmoji(true); 
 textView.setUseSystemDefault(true); 
  emojiconEditText.setUseSystemDefault(true);  
Atributo Xml:
 emojicon:emojiconUseSystemDefault="true"  
4. Alterando o tamanho dos emojis
Para alterar o tamanho dos emojis, você deve alterar o tamanho do texto definindo o valor de setEmojiconSize () método span>.
 textView.setEmojiconSize(30); 
Código XML
 emojicon:emojiconSize="28sp" 
  
5. Detectar quando o teclado é aberto ou fechado
O SuperNova-Emoji permite que você detecte quando o usuário abre o teclado ou fecha-o para realizar algumas ações, se necessário, como mostrar algumas visualizações quando o teclado abre e ocultá-lo quando o teclado fechou. Use o bloco de código abaixo para fazer isso.
 emojIcon.setKeyboardListener(new EmojIconActions.KeyboardListener() { 
  @Override 
  public void onKeyboardOpen() { 
  Log.i("Keyboard","open"); 
  } 
  @Override 
  public void onKeyboardClose() { 
  Log.i("Keyboard","close"); 
  } 
  }); 
6.Alterando as cores do teclado emoji para combinar com o tema do seu aplicativo
Você pode definir três cores para o teclado emojis adicionando três parâmetros ao construtor, os quais são pressionados, cores dos ícones das guias, cor das guias e fundo cor. Usaremos o mesmo construtor acima com o valor de cores.
  EmojIconActions emojIcon= new EmojIconActions(this, rootView, emojiconEditText, emojiImageView, 
 "#F44336","#e8e8e8","#f4f4f4"); 
  emojIcon.ShowEmojIcon();  
  
7. Criando um aplicativo de amostra
Agora, criaremos um aplicativo simples integrando os emojis para obter um bom entendimento dele em um aplicativo real.
1 . No Android Studio, vá para Arquivo ⇒ Novo projeto e preencha todos os detalhes necessários para criar um novo projeto.
2 . Abra build.gradle e adicione a biblioteca de emoji de supernova. Você também precisa adicionar seu repositório maven.
 repositories { 
  maven { url "  https://dl.bintray.com/hani-momanii/maven  "} 
 } 
 dependencies { 
  . 
  . 
  . 
  // Supernova Emoji 
  compile "hani.momanii.supernova\_emoji\_library:supernova-emoji-library:0.0.2" 
 } 
3 . Abra o arquivo de layout de sua atividade principal activity\_main.xml e adicione o código abaixo. Aqui você pode ver que adicionei o emojiconEditText , emojiconTextView e o ImageView .
activity\_main.xml
  version="1.0" encoding="utf-8"?> 
 xmlns:android="  http://schemas.android.com/apk/res/android  " 
  xmlns:emojicon="  http://schemas.android.com/apk/res-auto  " 
  xmlns:tools="  http://schemas.android.com/tools  " 
  android:id="@+id/root\_view" 
  android:layout\_width="match\_parent" 
  android:layout\_height="match\_parent" 
  android:paddingBottom="@dimen/activity\_vertical\_margin" 
  android:paddingLeft="@dimen/activity\_horizontal\_margin" 
  android:paddingRight="@dimen/activity\_horizontal\_margin" 
  android:paddingTop="@dimen/activity\_vertical\_margin" 
  tools:context="info.androidhive.emojis.MainActivity"> 
  android:id="@+id/emoji\_btn" 
  android:layout\_width="40dp" 
  android:layout\_height="40dp" 
  android:layout\_alignParentBottom="true" 
  android:layout\_alignParentLeft="true" 
  android:padding="4dp" 
  android:src="@drawable/ic\_insert\_emoticon\_black\_24dp" /> 
  
  android:id="@+id/submit\_btn" 
  android:layout\_width="40dp" 
  android:layout\_height="40dp" 
  android:layout\_alignParentBottom="true" 
  android:layout\_alignParentRight="true" 
  android:padding="4dp" 
  android:src="@android:drawable/ic\_menu\_send" /> 
  
  android:id="@+id/emojicon\_edit\_text" 
  android:layout\_width="match\_parent" 
  android:layout\_height="wrap\_content" 
  android:layout\_alignParentBottom="true" 
  android:layout\_toLeftOf="@id/submit\_btn" 
  android:layout\_toRightOf="@id/emoji\_btn" 
  emojicon:emojiconSize="28sp" /> 
  
  android:id="@+id/use\_system\_default" 
  android:layout\_width="wrap\_content" 
  android:layout\_height="wrap\_content" 
  android:layout\_below="@+id/textView" 
  android:layout\_centerHorizontal="true" 
  android:checked="false" 
  android:text="Use System Default?" /> 
  
  android:id="@+id/textView" 
  android:layout\_width="wrap\_content" 
  android:layout\_height="wrap\_content" 
  android:layout\_centerHorizontal="true" 
  android:layout\_centerVertical="true" 
  android:layout\_marginTop="26dp" 
  android:text="Hello Emojis!" 
  android:textAppearance="@style/TextAppearance.AppCompat.Large" 
  android:textColor="#000000" 
  emojicon:emojiconSize="45sp" 
  emojicon:emojiconUseSystemDefault="true" /> 
  
4 . Agora abra MainActivity.java e faça as alterações conforme mencionado abaixo. Esta atividade mostra os diferentes cenários de implementação do SuperNova-Emoji conforme explicado acima.
MainActivity.java
 package info.androidhive.emojis; 
 import android.os.Bundle; 
 import android.support.v7.app.AppCompatActivity; 
 import android.util.Log; 
 import android.view.View; 
 import android.widget.CheckBox; 
 import android.widget.CompoundButton; 
 import android.widget.ImageView; 
 import hani.momanii.supernova\_emoji\_library.Actions.EmojIconActions; 
 import hani.momanii.supernova\_emoji\_library.Helper.EmojiconEditText; 
 import hani.momanii.supernova\_emoji\_library.Helper.EmojiconTextView; 
 public class MainActivity extends AppCompatActivity { 
  private static final String TAG = MainActivity.class.getSimpleName(); 
  CheckBox mCheckBox; 
  EmojiconEditText emojiconEditText; 
  EmojiconTextView textView; 
  ImageView emojiImageView; 
  ImageView submitButton; 
  View rootView; 
  EmojIconActions emojIcon; 
  @Override 
  protected void onCreate(Bundle savedInstanceState) { 
  super.onCreate(savedInstanceState); 
  setContentView(R.layout.activity\_main); 
  rootView = findViewById(R.id.root\_view); 
  emojiImageView = (ImageView) findViewById(R.id.emoji\_btn); 
  submitButton = (ImageView) findViewById(R.id.submit\_btn); 
  mCheckBox = (CheckBox) findViewById(R.id.use\_system\_default); 
  emojiconEditText = (EmojiconEditText) findViewById(R.id.emojicon\_edit\_text); 
  textView = (EmojiconTextView) findViewById(R.id.textView); 
  emojIcon = new EmojIconActions(this, rootView, emojiconEditText, emojiImageView); 
  emojIcon.ShowEmojIcon(); 
  emojIcon.setIconsIds(R.drawable.ic\_action\_keyboard, R.drawable.smiley); 
  emojIcon.setKeyboardListener(new EmojIconActions.KeyboardListener() { 
  @Override 
  public void onKeyboardOpen() { 
  Log.e(TAG, "Keyboard opened!"); 
  } 
  public void onKeyboardClose() { 
  Log.e(TAG, "Keyboard closed"); 
  } 
  }); 
  mCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
  @Override 
  public void onCheckedChanged(CompoundButton compoundButton, boolean b) { 
  emojIcon.setUseSystemEmoji(b); 
  textView.setUseSystemDefault(b); 
  } 
  }); 
  submitButton.setOnClickListener(new View.OnClickListener() { 
  @Override 
  public void onClick(View v) { 
  String newText = emojiconEditText.getText().toString(); 
  textView.setText(newText); 
  } 
  }); 
  } 
 } 
Execute e teste o aplicativo.