{"id":13819560,"url":"https://github.com/vanniktech/Emoji","last_synced_at":"2025-05-16T04:34:11.155Z","repository":{"id":37432577,"uuid":"53511222","full_name":"vanniktech/Emoji","owner":"vanniktech","description":"A library to add Emoji support to your Android / iOS / JVM Application","archived":false,"fork":false,"pushed_at":"2025-05-13T12:57:18.000Z","size":159368,"stargazers_count":1585,"open_issues_count":7,"forks_count":290,"subscribers_count":38,"default_branch":"master","last_synced_at":"2025-05-14T00:52:21.441Z","etag":null,"topics":["android","emoji","emojione","ios","ios-emojis","kotlin","kotlin-android","kotlin-multiplatform"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vanniktech.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/funding.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":["vanniktech"]}},"created_at":"2016-03-09T16:01:10.000Z","updated_at":"2025-05-13T12:55:13.000Z","dependencies_parsed_at":"2023-09-27T03:58:08.870Z","dependency_job_id":"67ffef70-6310-43f7-a44f-56bcafb972fd","html_url":"https://github.com/vanniktech/Emoji","commit_stats":null,"previous_names":[],"tags_count":22,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vanniktech%2FEmoji","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vanniktech%2FEmoji/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vanniktech%2FEmoji/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vanniktech%2FEmoji/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vanniktech","download_url":"https://codeload.github.com/vanniktech/Emoji/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254470303,"owners_count":22076566,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","emoji","emojione","ios","ios-emojis","kotlin","kotlin-android","kotlin-multiplatform"],"created_at":"2024-08-04T08:00:50.187Z","updated_at":"2025-05-16T04:34:06.143Z","avatar_url":"https://github.com/vanniktech.png","language":"Kotlin","funding_links":["https://github.com/sponsors/vanniktech"],"categories":["Kotlin","Mobile","Libs"],"sub_categories":["\u003cA NAME=\"Widget\"\u003e\u003c/A\u003eWidget"],"readme":"# Emoji\n\nA Kotlin Multiplatform library to add Emoji support to your Android App / JVM Backend.\n\n- JVM\n  - Check out the sample jvm module for text parsing / searching functionality\n- Android\n  - Picking\n    - [`EmojiPopup`](./emoji/src/androidMain/kotlin/com/vanniktech/emoji/EmojiPopup.kt) - [PopupWindow](https://developer.android.com/reference/android/widget/PopupWindow) which overalys over the soft keyboard\n    - [`EmojiView`](./emoji/src/androidMain/kotlin/com/vanniktech/emoji/EmojiView.kt) - Normal view which is used by `EmojiPopup` and can also be used as a standalone to select emojis via categories\n  - Displaying (Android)\n    - [`EmojiAutoCompleteTextView`](./emoji/src/androidMain/kotlin/com/vanniktech/emoji/EmojiAutoCompleteTextView.kt)\n    - [`EmojiButton`](./emoji/src/androidMain/kotlin/com/vanniktech/emoji/EmojiButton.kt)\n    - [`EmojiCheckbox`](./emoji/src/androidMain/kotlin/com/vanniktech/emoji/EmojiCheckbox.kt)\n    - [`EmojiEditText`](./emoji/src/androidMain/kotlin/com/vanniktech/emoji/EmojiEditText.kt)\n    - [`EmojiMultiAutoCompleteTextView`](./emoji/src/androidMain/kotlin/com/vanniktech/emoji/EmojiMultiAutoCompleteTextView.kt)\n    - [`EmojiTextView`](./emoji/src/androidMain/kotlin/com/vanniktech/emoji/EmojiTextView.kt)\n    - For convenience, there's also a [`EmojiLayoutFactory`](./emoji/src/androidMain/kotlin/com/vanniktech/emoji/EmojiLayoutFactory.kt), which can be used to get automatic Emoji support when using normal Android Views such as `TextView`, `Checkbox`, etc.\n\nThe library has 4 different sprites providers to choose from ([iOS](#ios-emojis), [Google](#google), [Facebook](#facebook) \u0026 [Twitter](#twitter)). The emoji's are packaged as pictures and loaded at runtime. If you want to use a Font provider, check out [Google Compat](#google-compat). Alternatively, we also offer [AndroidX Emoji2 support](#androidx-emoji2).\n\n## iOS Emojis\n\n\u003cimg src=\"./fastlane/metadata/android/en-US/images/phoneScreenshots/ios_1.png\" alt=\"Normal Keyboard\" width=\"270\"\u003e\u003cimg src=\"./fastlane/metadata/android/en-US/images/phoneScreenshots/ios_2.png\" alt=\"Emoji Keyboard\" width=\"270\" hspace=\"20\"\u003e\u003cimg src=\"./fastlane/metadata/android/en-US/images/phoneScreenshots/ios_3.png\" alt=\"Recent Emojis\" width=\"270\"\u003e\n\nFor getting the above iOS Emojis, add the dependency:\n\n```groovy\nimplementation(\"com.vanniktech:emoji-ios:0.21.0\")\n```\n\nAnd install the provider in your Application class.\n\n```kotlin\nimport com.vanniktech.emoji.EmojiManager\nimport com.vanniktech.emoji.ios.IosEmojiProvider\n\nEmojiManager.install(IosEmojiProvider())\n```\n\n## Google\n\n\u003cimg src=\"./fastlane/metadata/android/en-US/images/phoneScreenshots/google_1.png\" alt=\"Normal Keyboard\" width=\"270\"\u003e\u003cimg src=\"./fastlane/metadata/android/en-US/images/phoneScreenshots/google_2.png\" alt=\"Emoji Keyboard\" width=\"270\" hspace=\"20\"\u003e\u003cimg src=\"./fastlane/metadata/android/en-US/images/phoneScreenshots/google_3.png\" alt=\"Recent Emojis\" width=\"270\"\u003e\n\nFor getting the above Google Emojis, add the dependency:\n\n```groovy\nimplementation(\"com.vanniktech:emoji-google:0.21.0\")\n```\n\nAnd install the provider in your Application class.\n\n```kotlin\nimport com.vanniktech.emoji.EmojiManager\nimport com.vanniktech.emoji.google.GoogleEmojiProvider\n\nEmojiManager.install(GoogleEmojiProvider())\n```\n\n## Facebook\n\n\u003cimg src=\"./fastlane/metadata/android/en-US/images/phoneScreenshots/google_1.png\" alt=\"Normal Keyboard\" width=\"270\"\u003e\u003cimg src=\"./fastlane/metadata/android/en-US/images/phoneScreenshots/google_2.png\" alt=\"Emoji Keyboard\" width=\"270\" hspace=\"20\"\u003e\u003cimg src=\"./fastlane/metadata/android/en-US/images/phoneScreenshots/google_3.png\" alt=\"Recent Emojis\" width=\"270\"\u003e\n\nFor getting the above Facebook Emojis, add the dependency:\n\n```groovy\nimplementation(\"com.vanniktech:emoji-facebook:0.21.0\")\n```\n\nAnd install the provider in your Application class.\n\n```kotlin\nimport com.vanniktech.emoji.EmojiManager\nimport com.vanniktech.emoji.facebook.FacebookEmojiProvider\n\nEmojiManager.install(FacebookEmojiProvider())\n```\n\n## Twitter\n\n\u003cimg src=\"./fastlane/metadata/android/en-US/images/phoneScreenshots/twitter_1.png\" alt=\"Normal Keyboard\" width=\"270\"\u003e\u003cimg src=\"./fastlane/metadata/android/en-US/images/phoneScreenshots/twitter_2.png\" alt=\"Emoji Keyboard\" width=\"270\" hspace=\"20\"\u003e\u003cimg src=\"./fastlane/metadata/android/en-US/images/phoneScreenshots/twitter_3.png\" alt=\"Recent Emojis\" width=\"270\"\u003e\n\nFor getting the above Twitter Emojis, add the dependency:\n\n```groovy\nimplementation(\"com.vanniktech:emoji-twitter:0.21.0\")\n```\n\nAnd install the provider in your Application class.\n\n```kotlin\nimport com.vanniktech.emoji.EmojiManager\nimport com.vanniktech.emoji.twitter.TwitterEmojiProvider\n\nEmojiManager.install(TwitterEmojiProvider())\n```\n\n## Google Compat\n\n\u003cimg src=\"./fastlane/metadata/android/en-US/images/phoneScreenshots/google_compat_1.png\" alt=\"Normal Keyboard\" width=\"270\"\u003e\u003cimg src=\"./fastlane/metadata/android/en-US/images/phoneScreenshots/google_compat_2.png\" alt=\"Emoji Keyboard\" width=\"270\" hspace=\"20\"\u003e\u003cimg src=\"./fastlane/metadata/android/en-US/images/phoneScreenshots/google_compat_3.png\" alt=\"Recent Emojis\" width=\"270\"\u003e\n\nFor getting the above Google Emojis, add the dependency (only works for Android Apps):\n\n```groovy\nimplementation(\"com.vanniktech:emoji-google-compat:0.21.0\")\n```\n\nAnd install the provider in your Application class.\n\n```kotlin\nimport androidx.core.provider.FontRequest\nimport androidx.emoji.text.EmojiCompat\nimport androidx.emoji.text.FontRequestEmojiCompatConfig\nimport com.vanniktech.emoji.EmojiManager\nimport com.vanniktech.emoji.googlecompat.GoogleCompatEmojiProvider\n\nEmojiManager.install(GoogleCompatEmojiProvider(EmojiCompat.init(\n    FontRequestEmojiCompatConfig(\n      this,\n      FontRequest(\n        \"com.google.android.gms.fonts\",\n        \"com.google.android.gms\",\n        \"Noto Color Emoji Compat\",\n        R.array.com_google_android_gms_fonts_certs,\n      )\n    ).setReplaceAll(true)\n  )\n))\n```\n\nInstead of using pictures, the Emojis are loaded via a Font which is downloaded at runtime, hence the library size is much much smaller in comparison. To load the font, please declare the following array:\n\n```xml\n\u003carray name=\"com_google_android_gms_fonts_certs\"\u003e\n  \u003citem\u003e@array/com_google_android_gms_fonts_certs_dev\u003c/item\u003e\n  \u003citem\u003e@array/com_google_android_gms_fonts_certs_prod\u003c/item\u003e\n\u003c/array\u003e\n\u003cstring-array name=\"com_google_android_gms_fonts_certs_dev\" tools:ignore=\"Typos\"\u003e\n  \u003citem\u003eMIIEqDCCA5CgAwIBAgIJANWFuGx90071MA0GCSqGSIb3DQEBBAUAMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEQMA4GA1UEChMHQW5kcm9pZDEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbTAeFw0wODA0MTUyMzM2NTZaFw0zNTA5MDEyMzM2NTZaMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEQMA4GA1UEChMHQW5kcm9pZDEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbTCCASAwDQYJKoZIhvcNAQEBBQADggENADCCAQgCggEBANbOLggKv+IxTdGNs8/TGFy0PTP6DHThvbbR24kT9ixcOd9W+EaBPWW+wPPKQmsHxajtWjmQwWfna8mZuSeJS48LIgAZlKkpFeVyxW0qMBujb8X8ETrWy550NaFtI6t9+u7hZeTfHwqNvacKhp1RbE6dBRGWynwMVX8XW8N1+UjFaq6GCJukT4qmpN2afb8sCjUigq0GuMwYXrFVee74bQgLHWGJwPmvmLHC69EH6kWr22ijx4OKXlSIx2xT1AsSHee70w5iDBiK4aph27yH3TxkXy9V89TDdexAcKk/cVHYNnDBapcavl7y0RiQ4biu8ymM8Ga/nmzhRKya6G0cGw8CAQOjgfwwgfkwHQYDVR0OBBYEFI0cxb6VTEM8YYY6FbBMvAPyT+CyMIHJBgNVHSMEgcEwgb6AFI0cxb6VTEM8YYY6FbBMvAPyT+CyoYGapIGXMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEQMA4GA1UEChMHQW5kcm9pZDEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDEiMCAGCSqGSIb3DQEJARYTYW5kcm9pZEBhbmRyb2lkLmNvbYIJANWFuGx90071MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEEBQADggEBABnTDPEF+3iSP0wNfdIjIz1AlnrPzgAIHVvXxunW7SBrDhEglQZBbKJEk5kT0mtKoOD1JMrSu1xuTKEBahWRbqHsXclaXjoBADb0kkjVEJu/Lh5hgYZnOjvlba8Ld7HCKePCVePoTJBdI4fvugnL8TsgK05aIskyY0hKI9L8KfqfGTl1lzOv2KoWD0KWwtAWPoGChZxmQ+nBli+gwYMzM1vAkP+aayLe0a1EQimlOalO762r0GXO0ks+UeXde2Z4e+8S/pf7pITEI/tP+MxJTALw9QUWEv9lKTk+jkbqxbsh8nfBUapfKqYn0eidpwq2AzVp3juYl7//fKnaPhJD9gs=\u003c/item\u003e\n\u003c/string-array\u003e\n\u003cstring-array name=\"com_google_android_gms_fonts_certs_prod\" tools:ignore=\"Typos\"\u003e\n  \u003citem\u003eMIIEQzCCAyugAwIBAgIJAMLgh0ZkSjCNMA0GCSqGSIb3DQEBBAUAMHQxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtHb29nbGUgSW5jLjEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDAeFw0wODA4MjEyMzEzMzRaFw0zNjAxMDcyMzEzMzRaMHQxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtHb29nbGUgSW5jLjEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDCCASAwDQYJKoZIhvcNAQEBBQADggENADCCAQgCggEBAKtWLgDYO6IIrgqWbxJOKdoR8qtW0I9Y4sypEwPpt1TTcvZApxsdyxMJZ2JORland2qSGT2y5b+3JKkedxiLDmpHpDsz2WCbdxgxRczfey5YZnTJ4VZbH0xqWVW/8lGmPav5xVwnIiJS6HXk+BVKZF+JcWjAsb/GEuq/eFdpuzSqeYTcfi6idkyugwfYwXFU1+5fZKUaRKYCwkkFQVfcAs1fXA5V+++FGfvjJ/CxURaSxaBvGdGDhfXE28LWuT9ozCl5xw4Yq5OGazvV24mZVSoOO0yZ31j7kYvtwYK6NeADwbSxDdJEqO4k//0zOHKrUiGYXtqw/A0LFFtqoZKFjnkCAQOjgdkwgdYwHQYDVR0OBBYEFMd9jMIhF1Ylmn/Tgt9r45jk14alMIGmBgNVHSMEgZ4wgZuAFMd9jMIhF1Ylmn/Tgt9r45jk14aloXikdjB0MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEUMBIGA1UEChMLR29vZ2xlIEluYy4xEDAOBgNVBAsTB0FuZHJvaWQxEDAOBgNVBAMTB0FuZHJvaWSCCQDC4IdGZEowjTAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBAUAA4IBAQBt0lLO74UwLDYKqs6Tm8/yzKkEu116FmH4rkaymUIE0P9KaMftGlMexFlaYjzmB2OxZyl6euNXEsQH8gjwyxCUKRJNexBiGcCEyj6z+a1fuHHvkiaai+KL8W1EyNmgjmyy8AW7P+LLlkR+ho5zEHatRbM/YAnqGcFh5iZBqpknHf1SKMXFh4dd239FJ1jWYfbMDMy3NS5CTMQ2XFI1MvcyUTdZPErjQfTbQe3aDQsQcafEQPD+nqActifKZ0Np0IS9L9kR/wbNvyz6ENwPiTrjV2KRkEjH78ZMcUQXg0L3BYHJ3lc69Vs5Ddf9uUGGMYldX3WfMBEmh/9iFBDAaTCK\u003c/item\u003e\n\u003c/string-array\u003e\n```\n\n## AndroidX Emoji2\n\n\u003cimg src=\"./fastlane/metadata/android/en-US/images/phoneScreenshots/androidx_emoji2_1.png\" alt=\"Normal Keyboard\" width=\"270\"\u003e\u003cimg src=\"./fastlane/metadata/android/en-US/images/phoneScreenshots/androidx_emoji2_2.png\" alt=\"Emoji Keyboard\" width=\"270\" hspace=\"20\"\u003e\u003cimg src=\"./fastlane/metadata/android/en-US/images/phoneScreenshots/androidx_emoji2_3.png\" alt=\"Recent Emojis\" width=\"270\"\u003e\n\nFor getting the above Google Emojis, add the dependency (only works for Android Apps):\n\n```groovy\nimplementation(\"com.vanniktech:emoji-androidx-emoji2:0.21.0\")\n```\n\nAnd install the provider in your Application class.\n\n```kotlin\nimport androidx.core.provider.FontRequest\nimport androidx.emoji2.text.EmojiCompat\nimport androidx.emoji.text.FontRequestEmojiCompatConfig\nimport com.vanniktech.emoji.EmojiManager\nimport com.vanniktech.emoji.googlecompat.GoogleCompatEmojiProvider\n\nEmojiManager.install(GoogleCompatEmojiProvider(EmojiCompat.init(this))\n```\n\n## Custom Emojis\n\nIf you want to display your own Emojis you can create your own implementation of [`EmojiProvider`](./emoji/src/commonMain/kotlin/com/vanniktech/emoji/EmojiProvider.kt) and pass it to `EmojiManager.install`.\n\nAll of the core API lays in `emoji`, which is being pulled in automatically by the providers:\n\n```groovy\nimplementation(\"com.vanniktech:emoji:0.21.0\")\n```\n\n## Android Material\n\nMaterial Design Library bindings can be included via:\n\n```groovy\nimplementation(\"com.vanniktech:emoji-material:0.21.0\")\n```\n\n- [`EmojiMaterialButton`](./emoji-material/src/androidMain/kotlin/com/vanniktech/emoji/material/mojiMaterialButton.kt)\n- [`EmojiMaterialRadioButton`](./emoji-material/src/androidMain/kotlin/com/vanniktech/emoji/material/EmojiMaterialRadioButton.kt)\n- [`EmojiMaterialCheckBox`](./emoji-material/src/androidMain/kotlin/com/vanniktech/emoji/material/MaterialCheckBox.kt)\n- [`EmojiTextInputEditText`](./emoji-material/src/androidMain/kotlin/com/vanniktech/emoji/material/EmojiTextInputEditText.kt)\n\nFor convenience, there's also a [`MaterialEmojiLayoutFactory`](./emoji-material/src/androidMain/kotlin/com/vanniktech/emoji/material/MaterialEmojiLayoutFactory.kt), which can be used to get automatic Emoji support.\n\n## Set up Android\n\n### Inserting Emojis\n\nDeclare your [`EmojiEditText`](./emoji/src/androidMain/kotlin/com/vanniktech/emoji/EmojiEditText.kt) in your layout xml file.\n\n```xml\n\u003ccom.vanniktech.emoji.EmojiEditText\n  android:id=\"@+id/emojiEditText\"\n  android:layout_width=\"match_parent\"\n  android:layout_height=\"wrap_content\"\n  android:imeOptions=\"actionSend\"\n  android:inputType=\"textCapSentences|textMultiLine\"\n  android:maxLines=\"3\"/\u003e\n```\n\nTo open the [`EmojiPopup`](./emoji/src/androidMain/kotlin/com/vanniktech/emoji/EmojiPopup.kt) execute the code below:\n\n```kotlin\nval emojiPopup = EmojiPopup(rootView, emojiEditText)\nemojiPopup.toggle() // Toggles visibility of the Popup.\nemojiPopup.dismiss() // Dismisses the Popup.\nemojiPopup.isShowing() // Returns true when Popup is showing.\n```\n\nThe `rootView` is the rootView of your layout xml file which will be used for calculating the height of the keyboard.\n`emojiEditText` is the [`EmojiEditText`](./emoji/src/androidMain/kotlin/com/vanniktech/emoji/EmojiEditText.kt) that you declared in your layout xml file.\n\n### Displaying Emojis\n\n```xml\n\u003ccom.vanniktech.emoji.EmojiTextView\n  android:id=\"@+id/emojiTextView\"\n  android:layout_width=\"wrap_content\"\n  android:layout_height=\"wrap_content\"/\u003e\n```\n\nJust use the [`EmojiTextView`](./emoji/src/androidMain/kotlin/com/vanniktech/emoji/EmojiTextView.kt) and call `setText` with the String that contains Unicode encoded Emojis. To change the size of the displayed Emojis call one of the `setEmojiSize` methods.\n\n### EmojiPopup Listeners\n\nThe [`EmojiPopup`](./emoji/src/androidMain/kotlin/com/vanniktech/emoji/EmojiPopup.kt) class allows you to declare several listeners.\n\n```kotlin\nEmojiPopup(\n  onSoftKeyboardCloseListener = { },\n  onEmojiClickListener = { },\n  onSoftKeyboardOpenListener = { },\n  onEmojiPopupShownListener = { },\n  onEmojiPopupDismissListener = { },\n  onEmojiBackspaceClickListener = { },\n)\n```\n\n### EmojiPopup Configuration\n\n#### Custom Recent Emoji implementation\n\nYou can pass your own implementation of the recent Emojis. Implement the [`RecentEmoji`](./emoji/src/commonMain/kotlin/com/vanniktech/emoji/recent/RecentEmoji.kt) interface and pass it when you're building the [`EmojiPopup`](./emoji/src/androidMain/kotlin/com/vanniktech/emoji/EmojiPopup.kt):\n\n```kotlin\nEmojiPopup(\n  recentEmoji = yourClassThatImplementsRecentEmoji,\n)\n```\n\nIf no instance or a null instance is set the [default implementation](emoji/src/main/java/com/vanniktech/emoji/RecentEmojiManager.kt) will be used.\n\n#### Custom Variant Emoji implementation\n\nYou can pass your own implementation of the variant Emojis. Implement the [`VariantEmoji`](./emoji/src/commonMain/kotlin/com/vanniktech/emoji/variant/VariantEmoji.kt) interface and pass it when you're building the [`EmojiPopup`](./emoji/src/androidMain/kotlin/com/vanniktech/emoji/EmojiPopup.kt):\n\n```kotlin\nEmojiPopup(\n  variantEmoji = yourClassThatImplementsVariantEmoji,\n)\n```\n\nIf no instance or a null instance is set the [default implementation](emoji/src/main/java/com/vanniktech/emoji/VariantEmojiManager.kt) will be used.\n\n#### Custom Search Emoji implementation\n\nYou can pass your own implementation for searching Emojis. Implement the [`SearchEmoji`](./emoji/src/commonMain/kotlin/com/vanniktech/emoji/search/SearchEmoji.kt) interface and pass it when you're building the [`EmojiPopup`](./emoji/src/androidMain/kotlin/com/vanniktech/emoji/EmojiPopup.kt):\n\n```kotlin\nEmojiPopup(\n  searchEmoji = yourClassThatImplementsSearchEmoji,\n)\n```\n\nIf no instance or a null instance is set the [default implementation](./emoji/src/commonMain/kotlin/com/vanniktech/emoji/search/SearchEmojiManager.kt) will be used.\n\n### Animations\n\n#### Custom keyboard enter and exit animations\n\nYou can pass your own animation style for enter and exit transitions of the Emoji keyboard while you're building the [`EmojiPopup`](./emoji/src/androidMain/kotlin/com/vanniktech/emoji/EmojiPopup.kt):\n\n```kotlin\nEmojiPopup(\n  keyboardAnimationStyle = emoji_fade_animation_style,\n)\n```\n\nIf no style is set the keyboard will appear and exit as a regular PopupWindow.\nThis library currently ships with two animation styles as an example:\n\n- R.style.emoji_slide_animation_style\n- R.style.emoji_fade_animation_style\n\n#### Custom page transformers\n\nYou can pass your own Page Transformer for the Emoji keyboard View Pager while you're building the [`EmojiPopup`](./emoji/src/androidMain/kotlin/com/vanniktech/emoji/EmojiPopup.kt):\n\n```kotlin\nEmojiPopup(\n  pageTransformer = MagicTransformer(),\n)\n```\n\nIf no transformer is set ViewPager will behave as its usual self. Please do note that this library currently does not ship any example Page Transformers.\n\n### Other goodies\n- [`MaximalNumberOfEmojisInputFilter`](./emoji/src/androidMain/kotlin/com/vanniktech/emoji/inputfilters/MaximalNumberOfEmojisInputFilter.kt) can be used to limit the number of Emojis one can type into an EditText\n- [`OnlyEmojisInputFilter`](./emoji/src/androidMain/kotlin/com/vanniktech/emoji/inputfilters/OnlyEmojisInputFilter.kt) can be used to limit the input of an EditText to emoji only\n- [`ForceSingleEmojiTrait`](./emoji/src/androidMain/kotlin/com/vanniktech/emoji/traits/ForceSingleEmojiTrait.kt) can be used to force a single emoji which can be replaced by a new one\n- [`DisableKeyboardInputTrait`](./emoji/src/androidMain/kotlin/com/vanniktech/emoji/traits/DisableKeyboardInputTrait.kt) disable input of the normal soft keyboard\n- [`SearchInPlaceTrait`](./emoji/src/androidMain/kotlin/com/vanniktech/emoji/traits/SearchInPlaceTrait.kt) search for an emoji using :query\n- [`EmojiView`](./emoji/src/androidMain/kotlin/com/vanniktech/emoji/EmojiView.kt) View of all emojis and categories which does not depend on a keyboard\n- `EmojiEditText#disableKeyboardInput()` to disable normal keyboard input. To undo call `#enableKeyboardInput()`\n\nMost of them are also showcased in the sample app.\n\n## Set up JVM\n\nInstall one of the providers you want, for instance the iOS Provider:\n\n```kotlin\nimport com.vanniktech.emoji.EmojiManager\nimport com.vanniktech.emoji.ios.IosEmojiProvider\n\nEmojiManager.install(IosEmojiProvider())\n```\n\nNow you can use all the API's you want, for instance when you want to search for `swim` emojis, you can do:\n\n```kotlin\nimport com.vanniktech.emoji.search.SearchEmojiManager\n\nSearchEmojiManager().search(query = \"swim\")\n  .forEach {\n    println(it)\n  }\n```\n\n# Snapshots\n\nThis library is also distributed as a SNAPSHOT, if you like to check out the latest features:\nAdd this to your repositories:\n\n```groovy\nmaven { url \"https://oss.sonatype.org/content/repositories/snapshots\" }\n```\n\n```groovy\nimplementation(\"com.vanniktech:emoji:0.22.0-SNAPSHOT\")\nimplementation(\"com.vanniktech:emoji-ios:0.22.0-SNAPSHOT\")\nimplementation(\"com.vanniktech:emoji-google:0.22.0-SNAPSHOT\")\nimplementation(\"com.vanniktech:emoji-google-compat:0.22.0-SNAPSHOT\")\nimplementation(\"com.vanniktech:emoji-androidx-emoji2:0.22.0-SNAPSHOT\")\nimplementation(\"com.vanniktech:emoji-twitter:0.22.0-SNAPSHOT\")\nimplementation(\"com.vanniktech:emoji-facebook:0.22.0-SNAPSHOT\")\nimplementation(\"com.vanniktech:emoji-material:0.22.0-SNAPSHOT\")\n```\n\n# Proguard / R8\n\nNo configuration needed.\n\n# License\n\nCopyright (C) 2016 - Niklas Baudy, Ruben Gees, Mario Đanić and contributors\n\nLicensed under the Apache License, Version 2.0\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvanniktech%2FEmoji","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvanniktech%2FEmoji","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvanniktech%2FEmoji/lists"}