Try the Compose way  
Jetpack Compose is the recommended UI toolkit for Android. Learn how to support emoji in Compose.  
[Support emoji →](https://developer.android.com/develop/ui/compose/text/emoji)  
![](https://developer.android.com/static/images/android-compose-ui-logo.png)
| **Caution:** As of late 2021, the `androidx.emoji:emoji`
| library is deprecated in favor of `androidx.emoji2:emoji2`, which
| provides integration into `androidx.appcompat`.
|
| To support modern emoji and simplify backward-compatibility with lower
| versions of Android, it's recommended that you migrate to the
| [`androidx.emoji2:emoji2`](https://developer.android.com/jetpack/androidx/releases/emoji2)
| library. For details on how to implement, see
| [Support modern emoji](https://developer.android.com/guide/topics/ui/look-and-feel/emoji2).


The [EmojiCompat](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat) support library aims to
keep Android devices up to date with the latest emoji. It prevents your app
from showing missing emoji characters in the form of ☐, which
indicates that your device does not have a font to display the text. By
using the [EmojiCompat](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat) support library,
your app users do not need to wait for Android OS updates to get the latest
emoji.
![Devices showing emoji](https://developer.android.com/static/guide/topics/ui/images/look-and-feel/emoji-compat/emoji-comparison.png) **Figure 1.** Emoji comparison


Refer to the following related resources:

- Emoji Compatibility sample app [Java](https://github.com/android/user-interface-samples/tree/main/EmojiCompat) \| [Kotlin](https://github.com/android/user-interface-samples/tree/main/EmojiCompatKotlin)

## How does EmojiCompat work?


The [EmojiCompat](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat) support library provides
classes to implement backward-compatible emoji support on devices running
Android 4.4 (API level 19) and higher. You can configure
[EmojiCompat](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat) with either bundled or
downloadable fonts. For more information about configuration, refer to the
following sections:

- [Downloadable fonts configuration](https://developer.android.com/develop/ui/views/text-and-emoji/emoji-compat#downloadable-fonts)
- [Bundled fonts configuration](https://developer.android.com/develop/ui/views/text-and-emoji/emoji-compat#bundled-fonts)


[EmojiCompat](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat) identifies emoji for a given
[CharSequence](https://developer.android.com/reference/java/lang/CharSequence), replaces them with
[EmojiSpans](https://developer.android.com/reference/androidx/emoji/text/EmojiSpan), if required, and
finally renders the emoji glyphs. Figure 2 demonstrates the process.
![EmojiCompat process](https://developer.android.com/static/guide/topics/ui/images/look-and-feel/emoji-compat/architecture.png) **Figure 2.** EmojiCompat process

## Downloadable fonts configuration

The downloadable fonts configuration uses the Downloadable Fonts support
library feature to download an emoji font. It also updates the necessary
emoji metadata that the [EmojiCompat](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat)
support library needs to keep up with the latest versions of the Unicode
specification.

### Adding support library dependency


To use the [EmojiCompat](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat) support library,
you must modify your app project's classpath dependencies within your
development environment.


To add a support library to your application project:

1. Open the `build.gradle` file of your application.
2. Add the support library to the `dependencies` section.

### Groovy

```groovy
dependencies {
    ...
    implementation "androidx.emoji:emoji:28.0.0"
}
```

### Kotlin

```kotlin
dependencies {
    ...
    implementation("androidx.emoji:emoji:28.0.0")
}
```

### Initializing the downloadable font
configuration


You need to initialize [EmojiCompat](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat) to
load the metadata and the typeface. Since initialization can take some time,
the initialization process runs on a background thread.


To initialize [EmojiCompat](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat) with the
downloadable font configuration, perform the following steps:

1. Create an instance of the [FontRequest](https://developer.android.com/reference/androidx/core/provider/FontRequest) class and provide the font provider authority, the font provider package, the font query, and a list of sets of hashes for the certificate. For more information about [FontRequest](https://developer.android.com/reference/androidx/core/provider/FontRequest), refer to the [Using Downloadable Fonts programmatically](https://developer.android.com/guide/topics/ui/look-and-feel/downloadable-fonts#programmatically) section in the [Downloadable Fonts](https://developer.android.com/guide/topics/ui/look-and-feel/downloadable-fonts) documentation.
2. Create an instance of [FontRequestEmojiCompatConfig](https://developer.android.com/reference/androidx/emoji/text/FontRequestEmojiCompatConfig) and provide instances of [Context](https://developer.android.com/reference/android/content/Context) and [FontRequest](https://developer.android.com/reference/androidx/core/provider/FontRequest).
3. Initialize [EmojiCompat](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat) by calling the [init()](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat#init(android.support.text.emoji.EmojiCompat.Config)) method and pass the instance of [FontRequestEmojiCompatConfig](https://developer.android.com/reference/androidx/emoji/text/FontRequestEmojiCompatConfig).  

### Kotlin

```kotlin
class MyApplication : Application() {

    override fun onCreate() {
        super.onCreate()
        val fontRequest = FontRequest(
                "com.example.fontprovider",
                "com.example",
                "emoji compat Font Query",
                CERTIFICATES
        )
        val config = FontRequestEmojiCompatConfig(this, fontRequest)
        EmojiCompat.init(config)
    }
}
```

### Java

```java
public class MyApplication extends Application {
  @Override
   public void onCreate() {
     super.onCreate();
     FontRequest fontRequest = new FontRequest(
       "com.example.fontprovider",
       "com.example",
       "emoji compat Font Query",
       CERTIFICATES);
     EmojiCompat.Config config = new FontRequestEmojiCompatConfig(this, fontRequest);
     EmojiCompat.init(config);
   }
}
```
4. Use [EmojiCompat](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat) widgets in layout XMLs. If you are using [AppCompat](https://developer.android.com/reference/android/support/v7/appcompat/package-summary), refer to the [Using EmojiCompat widgets with AppCompat](https://developer.android.com/develop/ui/views/text-and-emoji/emoji-compat#using-widgets-with-appcompat) section.  

```xml
<android.support.text.emoji.widget.EmojiTextView
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"/>

<android.support.text.emoji.widget.EmojiEditText
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"/>

<android.support.text.emoji.widget.EmojiButton
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"/>
```


For more information about how to configure
[EmojiCompat](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat) with the downloadable font
configuration, go to Emoji Compatibility sample app
[Java](https://github.com/android/user-interface-samples/tree/main/EmojiCompat) \| [Kotlin](https://github.com/android/user-interface-samples/tree/main/EmojiCompatKotlin).

## Library components

![Library components in EmojiCompat process](https://developer.android.com/static/guide/topics/ui/images/look-and-feel/emoji-compat/basic-components.png) **Figure 3.** Library components in the EmojiCompat process

Widgets: [EmojiEditText](https://developer.android.com/reference/androidx/emoji/widget/EmojiEditText),
[EmojiTextView](https://developer.android.com/reference/androidx/emoji/widget/EmojiTextView),
[EmojiButton](https://developer.android.com/reference/androidx/emoji/widget/EmojiButton)
:   Default widget implementations to use
    [EmojiCompat](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat) with
    [TextView](https://developer.android.com/reference/android/widget/TextView), [EditText](https://developer.android.com/reference/android/widget/EditText), and
    [Button](https://developer.android.com/reference/android/widget/Button).

[EmojiCompat](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat)
:   Main public surface for the support library. It performs all the
    external calls and coordinates with the other parts of the system.

[EmojiCompat.Config](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat.Config)
:   Configures the singleton instance to be created.

[EmojiSpan](https://developer.android.com/reference/androidx/emoji/text/EmojiSpan)
:   A [ReplacementSpan](https://developer.android.com/reference/android/text/style/ReplacementSpan) subclass that replaces the
    character (sequences) and renders the glyph.

[EmojiCompat](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat) Font
:   [EmojiCompat](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat) uses a font to display
    emoji. This font is a modified version of the
    [Android Emoji font](https://www.google.com/get/noto/help/emoji/).
    The font is modified as follows:

    - To provide backward compatibility to render emoji, all emoji characters are represented with a single Unicode code point in Unicode's Supplemental Private Use Area-A starting with U+F0001.
    - Extra emoji metadata is inserted in a binary format into the font and is parsed at runtime by [EmojiCompat](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat). The data is embedded in the font's `meta` table, with the private tag *Emji*.

## Configuration options


You can use the [EmojiCompat](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat) instance to
modify [EmojiCompat](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat) behavior. You can use
the following methods from the base class to set the configuration:

- [setReplaceAll()](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat.Config#setReplaceAll(boolean)): Determines whether [EmojiCompat](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat) should replace all emoji it finds with [EmojiSpans](https://developer.android.com/reference/androidx/emoji/text/EmojiSpan). By default, [EmojiCompat](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat) tries its best to understand if the system can render an emoji and does not replace those emoji. When set to `true`, [EmojiCompat](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat) replaces all emoji it finds with [EmojiSpans](https://developer.android.com/reference/androidx/emoji/text/EmojiSpan).
- [setEmojiSpanIndicatorEnabled()](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat.Config#setEmojiSpanIndicatorEnabled(boolean)): Indicates whether [EmojiCompat](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat) has replaced an emoji with an [EmojiSpan](https://developer.android.com/reference/androidx/emoji/text/EmojiSpan). When set to `true`, [EmojiCompat](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat) draws a background for the [EmojiSpan](https://developer.android.com/reference/androidx/emoji/text/EmojiSpan). This method is mainly used for debugging purposes.
- [setEmojiSpanIndicatorColor()](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat.Config#setEmojiSpanIndicatorColor(int)): Sets the color to indicate an [EmojiSpan](https://developer.android.com/reference/androidx/emoji/text/EmojiSpan). The default value is [GREEN](https://developer.android.com/reference/android/graphics/Color#GREEN).
- [registerInitCallback](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat#registerInitCallback(android.support.text.emoji.EmojiCompat.InitCallback)): Informs app about the state of the [EmojiCompat](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat) initialization.

### Kotlin

```kotlin
val config = FontRequestEmojiCompatConfig(...)
        .setReplaceAll(true)
        .setEmojiSpanIndicatorEnabled(true)
        .setEmojiSpanIndicatorColor(Color.GREEN)
        .registerInitCallback(object: EmojiCompat.InitCallback() {
            ...
        })
```

### Java

```java
EmojiCompat.Config config = new FontRequestEmojiCompatConfig(...)
       .setReplaceAll(true)
       .setEmojiSpanIndicatorEnabled(true)
       .setEmojiSpanIndicatorColor(Color.GREEN)
       .registerInitCallback(new InitCallback() {...})
```

## Adding initialization listeners


[EmojiCompat](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat) and
[EmojiCompat](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat) classes
provide
[registerInitCallback()](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat#registerInitCallback(android.support.text.emoji.EmojiCompat.InitCallback))
and
[unregisterInitCallback()](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat#unregisterInitCallback(android.support.text.emoji.EmojiCompat.InitCallback))
methods to register an initialization callback. To use these methods, create
an instance of the
[EmojiCompat.InitCallback](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat.InitCallback) class. Call
these methods and pass the instance of the
[EmojiCompat.InitCallback](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat.InitCallback) class. When the
initialization of the [EmojiCompat](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat) support
library is successful, the [EmojiCompat](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat)
class calls the
[onInitialized()](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat.InitCallback#onInitialized())
method. If the library
fails to initialize, the [EmojiCompat](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat)
class calls the
[onFailed()](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat.InitCallback#onFailed(java.lang.Throwable))
method.


To check the initialization state at any point, call the
[getLoadState()](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat#getLoadState())
method. It returns one of the following values:
[LOAD_STATE_LOADING](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat#LOAD_STATE_LOADING),
[LOAD_STATE_SUCCEEDED](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat#LOAD_STATE_SUCCEEDED),
or [LOAD_STATE_FAILED](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat#LOAD_STATE_FAILED).

## Using EmojiCompat with AppCompat widgets


If you are using [AppCompat widgets](https://developer.android.com/reference/android/support/v7/widget/package-summary), you
can use [EmojiCompat](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat) widgets that extend
from [AppCompat widgets](https://developer.android.com/reference/android/support/v7/widget/package-summary).

1. Add the support library to the dependencies section.  

   ### Groovy

   ```groovy
   dependencies {
       ...
       implementation "androidx.emoji:emoji-bundled:$version"
   }
   ```

   ### Kotlin

   ```kotlin
         dependencies {
             implementation("androidx.emoji:emoji-appcompat:$version")
         }
         
   ```  

   ### Groovy

   ```groovy
         dependencies {
             implementation "androidx.emoji:emoji-appcompat:$version"
         }
         
   ```
2. Use [EmojiCompat](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat) [AppCompat Widget](https://developer.android.com/reference/android/support/v7/widget/package-summary) widgets in layout XMLs.  

```xml
<android.support.text.emoji.widget.EmojiAppCompatTextView
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"/>

<android.support.text.emoji.widget.EmojiAppCompatEditText
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"/>

<android.support.text.emoji.widget.EmojiAppCompatButton
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"/>
```

## Bundled fonts configuration


The [EmojiCompat](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat) support library is also
available in a bundled font version. This package includes the font with the
embedded metadata. The package also includes a
[BundledEmojiCompatConfig](https://developer.android.com/reference/androidx/emoji/bundled/BundledEmojiCompatConfig)
that uses the [AssetManager](https://developer.android.com/reference/android/content/res/AssetManager) to load the metadata
and fonts.

**Note:** The size of the font is in multiple
megabytes.

### Adding support library dependency


To use the [EmojiCompat](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat) support library
with bundled font configuration, you *must* modify your app project's
classpath dependencies within your development environment.


To add a support library to your application project:

1. Open the `build.gradle` file of your application.
2. Add the support library to the `dependencies` section.

### Groovy

```groovy
dependencies {
    ...
    implementation "androidx.emoji:emoji:28.0.0"
}
```

### Kotlin

```kotlin
dependencies {
    ...
    implementation("androidx.emoji:emoji:28.0.0")
}
```

### Using bundled fonts to configure EmojiCompat


To use bundled fonts to configure
[EmojiCompat](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat), perform the following steps:

1. Use [BundledEmojiCompatConfig](https://developer.android.com/reference/androidx/emoji/bundled/BundledEmojiCompatConfig) to create an instance of [EmojiCompat](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat) and provide an instance of [Context](https://developer.android.com/reference/android/content/Context).
2. Call the [init()](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat#init(android.support.text.emoji.EmojiCompat.Config)) method to initialize [EmojiCompat](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat) and pass the instance of [BundledEmojiCompatConfig](https://developer.android.com/reference/androidx/emoji/bundled/BundledEmojiCompatConfig).

### Kotlin

```kotlin
class MyApplication : Application() {

    override fun onCreate() {
        super.onCreate()
        val config = BundledEmojiCompatConfig(this)
        EmojiCompat.init(config)
    }
}
```

### Java

```java
public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        EmojiCompat.Config config = new BundledEmojiCompatConfig(this);
        EmojiCompat.init(config);
        ...
    }
}
```

## Using EmojiCompat without widgets


[EmojiCompat](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat) uses
[EmojiSpan](https://developer.android.com/reference/androidx/emoji/text/EmojiSpan) to render correct images.
Therefore, it has to convert any given [CharSequence](https://developer.android.com/reference/java/lang/CharSequence) into
[Spanned](https://developer.android.com/reference/android/text/Spanned) instances with
[EmojiSpans](https://developer.android.com/reference/androidx/emoji/text/EmojiSpan). The
[EmojiCompat](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat) class provides a method to
convert [CharSequences](https://developer.android.com/reference/java/lang/CharSequence) into
[Spanned](https://developer.android.com/reference/android/text/Spanned) instances with
[EmojiSpans](https://developer.android.com/reference/androidx/emoji/text/EmojiSpan). Using this method,
you can process and cache the processed instances instead of the raw string,
which improves the performance of your application.  

### Kotlin

```kotlin
val processed = EmojiCompat.get().process("neutral face \uD83D\uDE10")
```

### Java

```java
CharSequence processed = EmojiCompat.get().process("neutral face \uD83D\uDE10");
```

## Using EmojiCompat for IMEs


Using the [EmojiCompat](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat) support library,
keyboards can render the emoji supported by the application they are
interacting with. IMEs can use the
[hasEmojiGlyph()](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat#hasEmojiGlyph(java.lang.CharSequence))
method to check if [EmojiCompat](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat) is capable
of rendering an emoji. This method takes a [CharSequence](https://developer.android.com/reference/java/lang/CharSequence) of
an emoji and returns `true` if
[EmojiCompat](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat) can detect and render the
emoji.


The keyboard can also check the version of the
[EmojiCompat](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat) support library that the app
supports to determine which emoji to render in the palette. To check the
version, if available, the keyboard needs to check whether the following
keys exist in the
[EditorInfo.extras](https://developer.android.com/reference/android/view/inputmethod/EditorInfo#extras)
bundle:

- [EDITOR_INFO_METAVERSION_KEY](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat#EDITOR_INFO_METAVERSION_KEY)
- If the key exists in the bundle, the value represents the version of the emoji metadata that the app uses. If this key does not exist, the app is not using [EmojiCompat](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat).
- [EDITOR_INFO_REPLACE_ALL_KEY](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat#EDITOR_INFO_REPLACE_ALL_KEY)
- If the key exists and is set to `true`, this indicates that the app has called the [SetReplaceAll()](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat.Config#setReplaceAll(boolean)) method. For more information about [EmojiCompat](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat) configuration, refer to the [Configuration options](https://developer.android.com/develop/ui/views/text-and-emoji/emoji-compat#configuration-options) section.


After receiving the keys in the
[EditorInfo.extras](https://developer.android.com/reference/android/view/inputmethod/EditorInfo#extras) bundle,
the keyboard can use the
[hasEmojiGlyph()](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat#hasEmojiGlyph(java.lang.CharSequence, int))
method, where `metadataVersion` is the value for
[EDITOR_INFO_METAVERSION_KEY](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat#EDITOR_INFO_METAVERSION_KEY),
to check whether the app can render a specific emoji.

## Using EmojiCompat with custom widgets


You can always use the [process()](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat#process(java.lang.CharSequence))
method to preprocess the [CharSequence](https://developer.android.com/reference/java/lang/CharSequence) in your app and add
it to any widget that can render [Spanned](https://developer.android.com/reference/android/text/Spanned) instances; for
example, [TextView](https://developer.android.com/reference/android/widget/TextView). In addition,
[EmojiCompat](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat) provides the following widget
helper classes to let you enrich your custom widgets with emoji support with
minimum effort.

- [EmojiTextViewHelper](https://developer.android.com/reference/androidx/emoji/widget/EmojiTextViewHelper)
- [EmojiEditTextHelper](https://developer.android.com/reference/androidx/emoji/widget/EmojiEditTextHelper)

**Sample TextView**
**Sample EditText**

## Frequently asked questions

- **How do I initiate the font download?**
- The emoji fonts are downloaded on first request, if they do not exist on the device. The download scheduling is transparent to the app.
- **How much time does it take to initialize?**
- After the font is downloaded, it takes approximately 150 milliseconds to initialize [EmojiCompat](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat).
- **How much memory does the EmojiCompat support library use?**
- Currently, the data structure to find the emoji is loaded in the app's memory and uses around 200KB.
- **Can I use EmojiCompat for a custom TextView?**
- Yes. EmojiCompat provides helper classes for custom widgets. It is also possible to preprocess a given string and convert it to [Spanned](https://developer.android.com/reference/android/text/Spanned). For more information about widget helper classes, refer to the [Using EmojiCompat with custom widgets](https://developer.android.com/develop/ui/views/text-and-emoji/emoji-compat#using-emojicompat-with-custom-widgets) section.
- **What happens if I add widgets in layout XMLs on devices that
  run on Android 4.4 (API level 19) or lower?**
- You can include the [EmojiCompat](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat) support library or its widgets in your applications that support devices running Android 4.4 (API level 19) or lower. However, if a device runs on an Android version prior to API level 19, [EmojiCompat](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat) and its widgets are in a "no operation" state. This means that [EmojiTextView](https://developer.android.com/reference/androidx/emoji/widget/EmojiTextView) behaves exactly like a regular [TextView](https://developer.android.com/reference/android/widget/TextView). [EmojiCompat](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat) instance; it immediately gets into a [LOAD_STATE_SUCCEEDED](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat#LOAD_STATE_SUCCEEDED) state when you call the [init()](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat#init(android.support.text.emoji.EmojiCompat.Config)) method.

## Additional resources


For additional information on using the
[EmojiCompat](https://developer.android.com/reference/androidx/emoji/text/EmojiCompat)
library, watch [EmojiCompat](https://www.youtube.com/watch?v=sYGKUtM2ga8).