├── app ├── .gitignore ├── src │ ├── main │ │ ├── res │ │ │ ├── values │ │ │ │ ├── strings.xml │ │ │ │ ├── colors.xml │ │ │ │ └── styles.xml │ │ │ ├── mipmap-hdpi │ │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-mdpi │ │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xhdpi │ │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xxhdpi │ │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xxxhdpi │ │ │ │ └── ic_launcher.png │ │ │ ├── drawable-xxhdpi │ │ │ │ ├── input_emoji.png │ │ │ │ └── input_emoji_hover.png │ │ │ ├── drawable │ │ │ │ ├── rc_emoji_selector.xml │ │ │ │ └── input_send_button.xml │ │ │ └── layout │ │ │ │ └── activity_main.xml │ │ ├── java │ │ │ └── com │ │ │ │ └── green │ │ │ │ └── hand │ │ │ │ ├── APP.java │ │ │ │ └── MainActivity.java │ │ └── AndroidManifest.xml │ └── test │ │ └── java │ │ └── com │ │ └── goume │ │ └── xuanfu │ │ └── emoji │ │ └── ExampleUnitTest.java ├── proguard-rules.pro └── build.gradle ├── library ├── .gitignore ├── src │ ├── main │ │ ├── res │ │ │ ├── values │ │ │ │ ├── strings.xml │ │ │ │ ├── attrs.xml │ │ │ │ └── emoji_map.xml │ │ │ ├── mipmap-xhdpi │ │ │ │ ├── u1f004.png │ │ │ │ ├── u1f12.png │ │ │ │ ├── u1f30f.png │ │ │ │ ├── u1f319.png │ │ │ │ ├── u1f332.png │ │ │ │ ├── u1f339.png │ │ │ │ ├── u1f33b.png │ │ │ │ ├── u1f349.png │ │ │ │ ├── u1f356.png │ │ │ │ ├── u1f35a.png │ │ │ │ ├── u1f366.png │ │ │ │ ├── u1f36b.png │ │ │ │ ├── u1f377.png │ │ │ │ ├── u1f37b.png │ │ │ │ ├── u1f381.png │ │ │ │ ├── u1f382.png │ │ │ │ ├── u1f384.png │ │ │ │ ├── u1f389.png │ │ │ │ ├── u1f393.png │ │ │ │ ├── u1f3a4.png │ │ │ │ ├── u1f3b2.png │ │ │ │ ├── u1f3b5.png │ │ │ │ ├── u1f3c0.png │ │ │ │ ├── u1f3c2.png │ │ │ │ ├── u1f3e1.png │ │ │ │ ├── u1f434.png │ │ │ │ ├── u1f436.png │ │ │ │ ├── u1f437.png │ │ │ │ ├── u1f44a.png │ │ │ │ ├── u1f44c.png │ │ │ │ ├── u1f44d.png │ │ │ │ ├── u1f44e.png │ │ │ │ ├── u1f44f.png │ │ │ │ ├── u1f451.png │ │ │ │ ├── u1f46a.png │ │ │ │ ├── u1f46b.png │ │ │ │ ├── u1f47b.png │ │ │ │ ├── u1f47c.png │ │ │ │ ├── u1f47d.png │ │ │ │ ├── u1f47f.png │ │ │ │ ├── u1f484.png │ │ │ │ ├── u1f48a.png │ │ │ │ ├── u1f48b.png │ │ │ │ ├── u1f48d.png │ │ │ │ ├── u1f494.png │ │ │ │ ├── u1f4a1.png │ │ │ │ ├── u1f4a2.png │ │ │ │ ├── u1f4a3.png │ │ │ │ ├── u1f4a4.png │ │ │ │ ├── u1f4a9.png │ │ │ │ ├── u1f4aa.png │ │ │ │ ├── u1f4b0.png │ │ │ │ ├── u1f4da.png │ │ │ │ ├── u1f4de.png │ │ │ │ ├── u1f4e2.png │ │ │ │ ├── u1f525.png │ │ │ │ ├── u1f52b.png │ │ │ │ ├── u1f556.png │ │ │ │ ├── u1f600.png │ │ │ │ ├── u1f601.png │ │ │ │ ├── u1f602.png │ │ │ │ ├── u1f603.png │ │ │ │ ├── u1f605.png │ │ │ │ ├── u1f606.png │ │ │ │ ├── u1f607.png │ │ │ │ ├── u1f608.png │ │ │ │ ├── u1f609.png │ │ │ │ ├── u1f60a.png │ │ │ │ ├── u1f60b.png │ │ │ │ ├── u1f60c.png │ │ │ │ ├── u1f60d.png │ │ │ │ ├── u1f60e.png │ │ │ │ ├── u1f60f.png │ │ │ │ ├── u1f611.png │ │ │ │ ├── u1f613.png │ │ │ │ ├── u1f614.png │ │ │ │ ├── u1f615.png │ │ │ │ ├── u1f616.png │ │ │ │ ├── u1f618.png │ │ │ │ ├── u1f61a.png │ │ │ │ ├── u1f61c.png │ │ │ │ ├── u1f61d.png │ │ │ │ ├── u1f61e.png │ │ │ │ ├── u1f61f.png │ │ │ │ ├── u1f621.png │ │ │ │ ├── u1f622.png │ │ │ │ ├── u1f623.png │ │ │ │ ├── u1f624.png │ │ │ │ ├── u1f628.png │ │ │ │ ├── u1f629.png │ │ │ │ ├── u1f62a.png │ │ │ │ ├── u1f62b.png │ │ │ │ ├── u1f62c.png │ │ │ │ ├── u1f62d.png │ │ │ │ ├── u1f62e.png │ │ │ │ ├── u1f62f.png │ │ │ │ ├── u1f630.png │ │ │ │ ├── u1f631.png │ │ │ │ ├── u1f632.png │ │ │ │ ├── u1f633.png │ │ │ │ ├── u1f634.png │ │ │ │ ├── u1f635.png │ │ │ │ ├── u1f636.png │ │ │ │ ├── u1f637.png │ │ │ │ ├── u1f648.png │ │ │ │ ├── u1f649.png │ │ │ │ ├── u1f64a.png │ │ │ │ ├── u1f64f.png │ │ │ │ ├── u1f680.png │ │ │ │ ├── u1f6ab.png │ │ │ │ ├── u1f6b2.png │ │ │ │ ├── u1f6bf.png │ │ │ │ ├── u1f91d.png │ │ │ │ ├── u23f0.png │ │ │ │ ├── u23f3.png │ │ │ │ ├── u2600.png │ │ │ │ ├── u2601.png │ │ │ │ ├── u2614.png │ │ │ │ ├── u2615.png │ │ │ │ ├── u261d.png │ │ │ │ ├── u263a.png │ │ │ │ ├── u26a1.png │ │ │ │ ├── u26bd.png │ │ │ │ ├── u26c4.png │ │ │ │ ├── u26c5.png │ │ │ │ ├── u270a.png │ │ │ │ ├── u270b.png │ │ │ │ ├── u270c.png │ │ │ │ ├── u270f.png │ │ │ │ ├── u2744.png │ │ │ │ ├── u2764.png │ │ │ │ ├── u2b50.png │ │ │ │ ├── input_emoji_delete.png │ │ │ │ ├── input_emoji_indicator.png │ │ │ │ └── input_emoji_indicator_hover.png │ │ │ └── layout │ │ │ │ └── input_emoji_board.xml │ │ ├── AndroidManifest.xml │ │ └── java │ │ │ └── com │ │ │ └── green │ │ │ └── hand │ │ │ └── library │ │ │ ├── EmojiUtil.java │ │ │ ├── EmojiGridAdapter.java │ │ │ ├── EmojiconSpan.java │ │ │ ├── widget │ │ │ ├── EmojiMultiAutoCompleteTextView.java │ │ │ ├── EmojiTextview.java │ │ │ ├── EmojiEdittext.java │ │ │ └── EmojiBoard.java │ │ │ ├── EmojiManager.java │ │ │ └── EmojiconHandler.java │ ├── test │ │ └── java │ │ │ └── com │ │ │ └── green │ │ │ └── hand │ │ │ └── library │ │ │ └── ExampleUnitTest.java │ └── androidTest │ │ └── java │ │ └── com │ │ └── green │ │ └── hand │ │ └── library │ │ └── ExampleInstrumentedTest.java ├── build.gradle └── proguard-rules.pro ├── settings.gradle ├── img └── emoji.gif ├── .gitattributes ├── gradle.properties ├── .idea ├── caches │ ├── gradle_models.ser │ └── build_file_checksums.ser ├── encodings.xml ├── vcs.xml ├── misc.xml ├── runConfigurations.xml ├── gradle.xml ├── jarRepositories.xml └── codeStyles │ └── Project.xml ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── .gitignore ├── gradlew.bat ├── README.md └── gradlew /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /library/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app', ':library' 2 | -------------------------------------------------------------------------------- /img/emoji.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/img/emoji.gif -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | android.enableJetifier=true 2 | android.useAndroidX=true 3 | org.gradle.jvmargs=-Xmx1536m -------------------------------------------------------------------------------- /.idea/caches/gradle_models.ser: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/.idea/caches/gradle_models.ser -------------------------------------------------------------------------------- /app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | EMoji 3 | 4 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /library/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Library 3 | 4 | -------------------------------------------------------------------------------- /.idea/caches/build_file_checksums.ser: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/.idea/caches/build_file_checksums.ser -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f004.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f004.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f12.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f30f.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f30f.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f319.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f319.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f332.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f332.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f339.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f339.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f33b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f33b.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f349.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f349.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f356.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f356.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f35a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f35a.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f366.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f366.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f36b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f36b.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f377.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f377.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f37b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f37b.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f381.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f381.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f382.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f382.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f384.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f384.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f389.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f389.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f393.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f393.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f3a4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f3a4.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f3b2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f3b2.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f3b5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f3b5.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f3c0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f3c0.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f3c2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f3c2.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f3e1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f3e1.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f434.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f434.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f436.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f436.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f437.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f437.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f44a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f44a.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f44c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f44c.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f44d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f44d.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f44e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f44e.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f44f.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f44f.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f451.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f451.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f46a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f46a.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f46b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f46b.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f47b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f47b.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f47c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f47c.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f47d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f47d.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f47f.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f47f.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f484.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f484.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f48a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f48a.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f48b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f48b.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f48d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f48d.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f494.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f494.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f4a1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f4a1.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f4a2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f4a2.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f4a3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f4a3.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f4a4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f4a4.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f4a9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f4a9.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f4aa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f4aa.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f4b0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f4b0.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f4da.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f4da.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f4de.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f4de.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f4e2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f4e2.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f525.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f525.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f52b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f52b.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f556.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f556.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f600.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f600.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f601.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f601.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f602.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f602.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f603.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f603.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f605.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f605.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f606.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f606.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f607.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f607.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f608.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f608.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f609.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f609.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f60a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f60a.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f60b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f60b.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f60c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f60c.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f60d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f60d.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f60e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f60e.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f60f.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f60f.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f611.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f611.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f613.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f613.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f614.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f614.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f615.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f615.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f616.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f616.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f618.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f618.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f61a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f61a.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f61c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f61c.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f61d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f61d.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f61e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f61e.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f61f.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f61f.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f621.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f621.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f622.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f622.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f623.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f623.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f624.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f624.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f628.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f628.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f629.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f629.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f62a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f62a.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f62b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f62b.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f62c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f62c.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f62d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f62d.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f62e.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f62e.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f62f.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f62f.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f630.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f630.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f631.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f631.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f632.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f632.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f633.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f633.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f634.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f634.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f635.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f635.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f636.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f636.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f637.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f637.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f648.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f648.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f649.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f649.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f64a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f64a.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f64f.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f64f.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f680.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f680.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f6ab.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f6ab.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f6b2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f6b2.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f6bf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f6bf.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u1f91d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u1f91d.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u23f0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u23f0.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u23f3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u23f3.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u2600.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u2600.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u2601.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u2601.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u2614.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u2614.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u2615.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u2615.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u261d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u261d.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u263a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u263a.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u26a1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u26a1.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u26bd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u26bd.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u26c4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u26c4.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u26c5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u26c5.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u270a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u270a.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u270b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u270b.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u270c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u270c.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u270f.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u270f.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u2744.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u2744.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u2764.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u2764.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/u2b50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/u2b50.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/input_emoji.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/app/src/main/res/drawable-xxhdpi/input_emoji.png -------------------------------------------------------------------------------- /library/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/input_emoji_hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/app/src/main/res/drawable-xxhdpi/input_emoji_hover.png -------------------------------------------------------------------------------- /.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/input_emoji_delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/input_emoji_delete.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/input_emoji_indicator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/input_emoji_indicator.png -------------------------------------------------------------------------------- /library/src/main/res/mipmap-xhdpi/input_emoji_indicator_hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OneGreenHand/Emoji/HEAD/library/src/main/res/mipmap-xhdpi/input_emoji_indicator_hover.png -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/libraries 5 | /.idea/modules.xml 6 | /.idea/workspace.xml 7 | .DS_Store 8 | /build 9 | /captures 10 | .externalNativeBuild 11 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #3F51B5 4 | #303F9F 5 | #FF4081 6 | 7 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Thu Aug 29 18:45:07 CST 2019 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-6.4.1-all.zip 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/rc_emoji_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 9 | -------------------------------------------------------------------------------- /app/src/main/java/com/green/hand/APP.java: -------------------------------------------------------------------------------- 1 | package com.green.hand; 2 | 3 | import android.app.Application; 4 | import android.content.Context; 5 | 6 | import com.green.hand.library.EmojiManager; 7 | 8 | public class APP extends Application { 9 | 10 | @Override 11 | public void onCreate() { 12 | super.onCreate(); 13 | EmojiManager.init(this);//初始化 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/test/java/com/goume/xuanfu/emoji/ExampleUnitTest.java: -------------------------------------------------------------------------------- 1 | package com.goume.xuanfu.emoji; 2 | 3 | import org.junit.Test; 4 | 5 | import static org.junit.Assert.*; 6 | 7 | /** 8 | * Example local unit test, which will execute on the development machine (host). 9 | * 10 | * @see Testing documentation 11 | */ 12 | public class ExampleUnitTest { 13 | @Test 14 | public void addition_isCorrect() { 15 | assertEquals(4, 2 + 2); 16 | } 17 | } -------------------------------------------------------------------------------- /library/src/test/java/com/green/hand/library/ExampleUnitTest.java: -------------------------------------------------------------------------------- 1 | package com.green.hand.library; 2 | 3 | import org.junit.Test; 4 | 5 | import static org.junit.Assert.*; 6 | 7 | /** 8 | * Example local unit test, which will execute on the development machine (host). 9 | * 10 | * @see Testing documentation 11 | */ 12 | public class ExampleUnitTest { 13 | @Test 14 | public void addition_isCorrect() { 15 | assertEquals(4, 2 + 2); 16 | } 17 | } -------------------------------------------------------------------------------- /.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | -------------------------------------------------------------------------------- /library/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.library' 2 | apply plugin: 'com.github.dcendents.android-maven' 3 | group = 'com.github.OneGreenHand' 4 | android { 5 | compileSdkVersion 29 6 | buildToolsVersion "29.0.3" 7 | defaultConfig { 8 | minSdkVersion 14 9 | targetSdkVersion 29 10 | versionCode 1 11 | versionName "1.0" 12 | testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' 13 | } 14 | 15 | buildTypes { 16 | release { 17 | minifyEnabled false 18 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 19 | } 20 | } 21 | 22 | } 23 | 24 | dependencies { 25 | implementation 'androidx.appcompat:appcompat:1.2.0-rc01' 26 | implementation 'androidx.recyclerview:recyclerview:1.1.0' 27 | } -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | -------------------------------------------------------------------------------- /library/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/input_send_button.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | 11 | 13 | 14 | 15 | 16 | 17 | 18 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /library/src/main/res/layout/input_emoji_board.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 12 | 13 | 21 | -------------------------------------------------------------------------------- /library/src/main/res/values/attrs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 20 | 21 | -------------------------------------------------------------------------------- /library/src/androidTest/java/com/green/hand/library/ExampleInstrumentedTest.java: -------------------------------------------------------------------------------- 1 | package com.green.hand.library; 2 | 3 | import android.content.Context; 4 | import android.support.test.InstrumentationRegistry; 5 | import android.support.test.runner.AndroidJUnit4; 6 | 7 | import org.junit.Test; 8 | import org.junit.runner.RunWith; 9 | 10 | import static org.junit.Assert.*; 11 | 12 | /** 13 | * Instrumented test, which will execute on an Android device. 14 | * 15 | * @see Testing documentation 16 | */ 17 | @RunWith(AndroidJUnit4.class) 18 | public class ExampleInstrumentedTest { 19 | @Test 20 | public void useAppContext() { 21 | // Context of the app under test. 22 | Context appContext = InstrumentationRegistry.getTargetContext(); 23 | 24 | assertEquals("com.green.hand.library.test", appContext.getPackageName()); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | android { 4 | compileSdkVersion 29 5 | buildToolsVersion "29.0.3" 6 | defaultConfig { 7 | applicationId "com.green.hand.emoji" 8 | minSdkVersion 14 9 | targetSdkVersion 29 10 | versionCode 1 11 | versionName "1.0" 12 | testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' 13 | javaCompileOptions { annotationProcessorOptions { includeCompileClasspath = true } } 14 | } 15 | buildTypes { 16 | release { 17 | minifyEnabled false 18 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 19 | } 20 | } 21 | } 22 | 23 | dependencies { 24 | implementation fileTree(include: ['*.jar'], dir: 'libs') 25 | implementation 'androidx.appcompat:appcompat:1.3.0-alpha01' 26 | implementation project(':library') 27 | } -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 12 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /.idea/jarRepositories.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 10 | 14 | 15 | 19 | 20 | 24 | 25 | -------------------------------------------------------------------------------- /library/src/main/java/com/green/hand/library/EmojiUtil.java: -------------------------------------------------------------------------------- 1 | package com.green.hand.library; 2 | 3 | import android.content.res.Resources; 4 | 5 | /** 6 | * @author OneGreenHand 7 | * @package com.green.hand.library 8 | * @fileName EmojiUtil 9 | * @data on 2019/1/3 17:17 10 | * @describe 11 | */ 12 | public class EmojiUtil { 13 | public static final int ROW = 3; 14 | public static final int COLUMN = 7; 15 | 16 | public static int getPageSize() {//得到总共需要有多少页 17 | return (int) Math.ceil((double) EmojiManager.getSize() / (ROW * COLUMN - 1)); 18 | } 19 | 20 | public static int getOnePageSize() {//得到每一页要显示的数量 21 | return EmojiUtil.ROW * EmojiUtil.COLUMN - 1; 22 | } 23 | 24 | /** 25 | * Value of dp to value of px. 26 | * 27 | * @param dpValue The value of dp. 28 | * @return value of px 29 | */ 30 | public static int dp2px(final float dpValue) { 31 | final float scale = Resources.getSystem().getDisplayMetrics().density; 32 | return (int) (dpValue * scale + 0.5f); 33 | } 34 | 35 | /** 36 | * Value of px to value of dp. 37 | * 38 | * @param pxValue The value of px. 39 | * @return value of dp 40 | */ 41 | public static int px2dp(final float pxValue) { 42 | final float scale = Resources.getSystem().getDisplayMetrics().density; 43 | return (int) (pxValue / scale + 0.5f); 44 | } 45 | 46 | } 47 | -------------------------------------------------------------------------------- /library/src/main/java/com/green/hand/library/EmojiGridAdapter.java: -------------------------------------------------------------------------------- 1 | package com.green.hand.library; 2 | 3 | import androidx.annotation.NonNull; 4 | import androidx.recyclerview.widget.RecyclerView; 5 | import android.view.View; 6 | import android.view.ViewGroup; 7 | import android.widget.ImageView; 8 | import android.widget.LinearLayout; 9 | 10 | import java.util.ArrayList; 11 | import java.util.List; 12 | 13 | public class EmojiGridAdapter extends RecyclerView.Adapter { 14 | List resList = new ArrayList<>(); 15 | private EmojiClick emojiClick; 16 | 17 | public void setOnEmojiClick(EmojiClick emojiClick) { 18 | this.emojiClick = emojiClick; 19 | } 20 | 21 | public interface EmojiClick { 22 | void onClick(int position); 23 | } 24 | 25 | public void setResList(List list) { 26 | resList.clear(); 27 | resList.addAll(list); 28 | } 29 | 30 | //创建ViewHolder并返回,后续item布局里控件都是从ViewHolder中取出 31 | @Override 32 | public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { 33 | return new MyHolder(new ImageView(parent.getContext())); 34 | } 35 | 36 | //通过方法提供的ViewHolder,将数据绑定到ViewHolder中 37 | @Override 38 | public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder viewHolder, final int position) { 39 | ImageView img = (ImageView) viewHolder.itemView; 40 | LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, EmojiUtil.dp2px(23)); 41 | layoutParams.topMargin = EmojiUtil.dp2px(10); 42 | img.setLayoutParams(layoutParams); 43 | img.setImageResource(resList.get(position)); 44 | img.setOnClickListener(new View.OnClickListener() { 45 | @Override 46 | public void onClick(View v) { 47 | if (emojiClick != null) 48 | emojiClick.onClick(position); 49 | } 50 | }); 51 | } 52 | 53 | //获取数据源总的条数 54 | @Override 55 | public int getItemCount() { 56 | return resList.size(); 57 | } 58 | 59 | /** 60 | * 自定义的ViewHolder 61 | */ 62 | class MyHolder extends RecyclerView.ViewHolder { 63 | 64 | public MyHolder(ImageView img) { 65 | super(img); 66 | } 67 | } 68 | } -------------------------------------------------------------------------------- /gradlew.bat: -------------------------------------------------------------------------------- 1 | @if "%DEBUG%" == "" @echo off 2 | @rem ########################################################################## 3 | @rem 4 | @rem Gradle startup script for Windows 5 | @rem 6 | @rem ########################################################################## 7 | 8 | @rem Set local scope for the variables with windows NT shell 9 | if "%OS%"=="Windows_NT" setlocal 10 | 11 | set DIRNAME=%~dp0 12 | if "%DIRNAME%" == "" set DIRNAME=. 13 | set APP_BASE_NAME=%~n0 14 | set APP_HOME=%DIRNAME% 15 | 16 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 17 | set DEFAULT_JVM_OPTS= 18 | 19 | @rem Find java.exe 20 | if defined JAVA_HOME goto findJavaFromJavaHome 21 | 22 | set JAVA_EXE=java.exe 23 | %JAVA_EXE% -version >NUL 2>&1 24 | if "%ERRORLEVEL%" == "0" goto init 25 | 26 | echo. 27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 28 | echo. 29 | echo Please set the JAVA_HOME variable in your environment to match the 30 | echo location of your Java installation. 31 | 32 | goto fail 33 | 34 | :findJavaFromJavaHome 35 | set JAVA_HOME=%JAVA_HOME:"=% 36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 37 | 38 | if exist "%JAVA_EXE%" goto init 39 | 40 | echo. 41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 42 | echo. 43 | echo Please set the JAVA_HOME variable in your environment to match the 44 | echo location of your Java installation. 45 | 46 | goto fail 47 | 48 | :init 49 | @rem Get command-line arguments, handling Windows variants 50 | 51 | if not "%OS%" == "Windows_NT" goto win9xME_args 52 | 53 | :win9xME_args 54 | @rem Slurp the command line arguments. 55 | set CMD_LINE_ARGS= 56 | set _SKIP=2 57 | 58 | :win9xME_args_slurp 59 | if "x%~1" == "x" goto execute 60 | 61 | set CMD_LINE_ARGS=%* 62 | 63 | :execute 64 | @rem Setup the command line 65 | 66 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 67 | 68 | @rem Execute Gradle 69 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% 70 | 71 | :end 72 | @rem End local scope for the variables with windows NT shell 73 | if "%ERRORLEVEL%"=="0" goto mainEnd 74 | 75 | :fail 76 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 77 | rem the _cmd.exe /c_ return code! 78 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 79 | exit /b 1 80 | 81 | :mainEnd 82 | if "%OS%"=="Windows_NT" endlocal 83 | 84 | :omega 85 | -------------------------------------------------------------------------------- /library/src/main/java/com/green/hand/library/EmojiconSpan.java: -------------------------------------------------------------------------------- 1 | package com.green.hand.library; 2 | 3 | import android.content.Context; 4 | import android.graphics.Canvas; 5 | import android.graphics.Paint; 6 | import android.graphics.drawable.Drawable; 7 | import android.text.style.DynamicDrawableSpan; 8 | 9 | import java.lang.ref.WeakReference; 10 | 11 | public class EmojiconSpan extends DynamicDrawableSpan { 12 | private final Context mContext; 13 | private final int mResourceId; 14 | private final int mSize; 15 | private final int mTextSize; 16 | private int mHeight; 17 | private int mWidth; 18 | private int mTop; 19 | private Drawable mDrawable; 20 | private WeakReference mDrawableRef; 21 | 22 | public EmojiconSpan(Context context, int resourceId, int size, int alignment, int textSize) { 23 | super(alignment); 24 | mContext = context; 25 | mResourceId = resourceId; 26 | mWidth = mHeight = mSize = size; 27 | mTextSize = textSize; 28 | } 29 | 30 | public Drawable getDrawable() { 31 | if (mDrawable == null) { 32 | try { 33 | mDrawable = mContext.getResources().getDrawable(mResourceId); 34 | mHeight = mSize; 35 | mWidth = mHeight * mDrawable.getIntrinsicWidth() / mDrawable.getIntrinsicHeight(); 36 | mTop = (mTextSize - mHeight) / 2; 37 | mDrawable.setBounds(0, mTop, mWidth, mTop + mHeight); 38 | } catch (Exception e) { 39 | // swallow 40 | } 41 | } 42 | return mDrawable; 43 | } 44 | 45 | @Override 46 | public void draw(Canvas canvas, CharSequence text, int start, int end, float x, int top, int y, int bottom, Paint paint) { 47 | //super.draw(canvas, text, start, end, x, top, y, bottom, paint); 48 | Drawable b = getCachedDrawable(); 49 | canvas.save(); 50 | int transY = bottom - b.getBounds().bottom; 51 | if (mVerticalAlignment == ALIGN_BASELINE) { 52 | transY = top + ((bottom - top) / 2) - ((b.getBounds().bottom - b.getBounds().top) / 2) - mTop; 53 | } 54 | canvas.translate(x, transY); 55 | b.draw(canvas); 56 | canvas.restore(); 57 | } 58 | 59 | private Drawable getCachedDrawable() { 60 | if (mDrawableRef == null || mDrawableRef.get() == null) { 61 | mDrawableRef = new WeakReference(getDrawable()); 62 | } 63 | return mDrawableRef.get(); 64 | } 65 | 66 | } 67 | -------------------------------------------------------------------------------- /library/src/main/java/com/green/hand/library/widget/EmojiMultiAutoCompleteTextView.java: -------------------------------------------------------------------------------- 1 | package com.green.hand.library.widget; 2 | 3 | import android.content.Context; 4 | import android.content.res.TypedArray; 5 | import androidx.appcompat.widget.AppCompatMultiAutoCompleteTextView; 6 | import android.text.style.DynamicDrawableSpan; 7 | import android.util.AttributeSet; 8 | 9 | import com.green.hand.library.EmojiconHandler; 10 | import com.green.hand.library.R; 11 | 12 | public class EmojiMultiAutoCompleteTextView extends AppCompatMultiAutoCompleteTextView { 13 | private int mEmojiconSize; 14 | private int mEmojiconAlignment; 15 | private int mEmojiconTextSize; 16 | private boolean mUseSystemDefault = false; 17 | 18 | public EmojiMultiAutoCompleteTextView(Context context) { 19 | super(context); 20 | init(null); 21 | } 22 | 23 | public EmojiMultiAutoCompleteTextView(Context context, AttributeSet attrs) { 24 | super(context, attrs); 25 | init(attrs); 26 | } 27 | 28 | public EmojiMultiAutoCompleteTextView(Context context, AttributeSet attrs, int defStyle) { 29 | super(context, attrs, defStyle); 30 | init(attrs); 31 | } 32 | 33 | private void init(AttributeSet attrs) { 34 | mEmojiconSize = (int) getTextSize(); 35 | mEmojiconTextSize = (int) getTextSize(); 36 | if (attrs != null) { 37 | TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.Emojicon); 38 | mEmojiconSize = (int) a.getDimension(R.styleable.Emojicon_emojiconSize, getTextSize()); 39 | mEmojiconAlignment = a.getInt(R.styleable.Emojicon_emojiconAlignment, DynamicDrawableSpan.ALIGN_BASELINE); 40 | mUseSystemDefault = a.getBoolean(R.styleable.Emojicon_emojiconUseSystemDefault, false); 41 | a.recycle(); 42 | } 43 | setText(getText()); 44 | } 45 | 46 | @Override 47 | protected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) { 48 | updateText(); 49 | } 50 | 51 | /** 52 | * Set the size of emojicon in pixels. 53 | */ 54 | public void setEmojiconSize(int pixels) { 55 | mEmojiconSize = pixels; 56 | updateText(); 57 | } 58 | 59 | private void updateText() { 60 | EmojiconHandler.addEmojis(getContext(), getText(), mEmojiconSize, mEmojiconAlignment, mEmojiconTextSize, mUseSystemDefault); 61 | } 62 | 63 | /** 64 | * Set whether to use system default emojicon 65 | */ 66 | public void setUseSystemDefault(boolean useSystemDefault) { 67 | mUseSystemDefault = useSystemDefault; 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 效果图 2 | ![效果图](https://github.com/OneGreenHand/Emoji/blob/master/img/emoji.gif?raw=true.gif) 3 | ## 如何使用 4 | ```java 5 | dependencies { 6 |  implementation 'com.github.OneGreenHand:Emoji:v1.2.4' 7 | } 8 | ``` 9 | 10 | **1、初始化** 11 | 在Application中进行初始化 12 | ```java 13 | EmojiManager.init(this) 14 | ``` 15 | 16 | **2、在布局中应用** 17 | ```java 18 | 25 | ``` 26 | 27 | *可选,如果不用此控件,需自行监听实现,具体参考[EmoniEdittext](https://github.com/OneGreenHand/Emoji/blob/master/library/src/main/java/com/green/hand/library/widget/EmojiEdittext.java)。 28 | ```java 29 | 33 | ``` 34 | 35 | //兼容emoji显示的textview 36 | ```java 37 | 41 | ``` 42 | 43 | **3、在页面中使用** 44 | 实现表情框Item单击事件(emojiBoard为[EmojiBoard](https://github.com/OneGreenHand/Emoji/blob/master/library/src/main/java/com/green/hand/library/widget/EmojiBoard.java)控件,textEditor为Edittext控件) 45 | ```java 46 | emojiBoard.setItemClickListener(new EmojiBoard.OnEmojiItemClickListener() {//表情框点击事件 47 | @Override 48 | public void onClick(String code) { 49 | if (code.equals("/DEL")) {//点击了删除图标 50 | textEditor.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN,KeyEvent.KEYCODE_DEL)); 51 | } else {//插入表情 52 | textEditor.getText().insert(textEditor.getSelectionStart(), code); 53 | } 54 | } 55 | }); 56 | ``` 57 | 58 | **4、其他方法** 59 | EmojiBoard ---> showBoard() //显示隐藏表情框 60 | EmoniEdittext ---> isEnable(view) //用于未输入文字时,其他按钮不可点击 61 | EmojiTextview ---> setUseSystemDefault(boolean) //是否使用系统默认表情 62 | ### 属性说明 63 | deleteIcon:删除icon 64 | emojiIndicator:底部未选中icon 65 | emojiIndicatorHover:底部选中icon 66 | 67 | ### **补充说明** 68 | 如果仍然出现显示为☐或者乱码情况,可尝试使用官方的 [EmojiCompat](https://www.jianshu.com/p/2a26502db899) 支持库或使用[emojicon](https://github.com/rockerhieu/emojicon)三方库 69 | ### 版本日志 70 | + v1.2.4 71 | - 升级为androidX 72 | + v1.2.3 73 | - GridView变更为Recycleview、资源优化、升级版本 74 | + v1.2.2 75 | - 新增、替换表情、去除ButterKnife依赖 76 | + v1.2.1 77 | - 新增、去除重复表情 78 | - 修复部分手机无法显示问题 79 | - 加入兼容Emoji显示的控件 80 | 81 | ### 其他 82 | 有任何问题,可以在[issues](https://github.com/OneGreenHand/Emoji/issues)给我留言反馈。
-------------------------------------------------------------------------------- /library/src/main/java/com/green/hand/library/widget/EmojiTextview.java: -------------------------------------------------------------------------------- 1 | package com.green.hand.library.widget; 2 | 3 | import android.content.Context; 4 | import android.content.res.TypedArray; 5 | import android.text.SpannableStringBuilder; 6 | import android.text.TextUtils; 7 | import android.text.style.DynamicDrawableSpan; 8 | import android.util.AttributeSet; 9 | import android.widget.TextView; 10 | 11 | import com.green.hand.library.EmojiconHandler; 12 | import com.green.hand.library.R; 13 | 14 | public class EmojiTextview extends TextView { 15 | private int mEmojiconSize; 16 | private int mEmojiconAlignment; 17 | private int mEmojiconTextSize; 18 | private int mTextStart = 0; 19 | private int mTextLength = -1; 20 | private boolean mUseSystemDefault = false; 21 | 22 | public EmojiTextview(Context context) { 23 | super(context); 24 | init(null); 25 | } 26 | 27 | public EmojiTextview(Context context, AttributeSet attrs) { 28 | super(context, attrs); 29 | init(attrs); 30 | } 31 | 32 | public EmojiTextview(Context context, AttributeSet attrs, int defStyle) { 33 | super(context, attrs, defStyle); 34 | init(attrs); 35 | } 36 | 37 | private void init(AttributeSet attrs) { 38 | mEmojiconTextSize = (int) getTextSize(); 39 | mEmojiconSize = (int) getTextSize(); 40 | if (attrs != null) { 41 | TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.Emojicon); 42 | mEmojiconSize = (int) a.getDimension(R.styleable.Emojicon_emojiconSize, getTextSize()); 43 | mEmojiconAlignment = a.getInt(R.styleable.Emojicon_emojiconAlignment, DynamicDrawableSpan.ALIGN_BASELINE); 44 | mTextStart = a.getInteger(R.styleable.Emojicon_emojiconTextStart, 0); 45 | mTextLength = a.getInteger(R.styleable.Emojicon_emojiconTextLength, -1); 46 | mUseSystemDefault = a.getBoolean(R.styleable.Emojicon_emojiconUseSystemDefault, false); 47 | a.recycle(); 48 | } 49 | setText(getText()); 50 | } 51 | 52 | @Override 53 | public void setText(CharSequence text, BufferType type) { 54 | if (!TextUtils.isEmpty(text)) { 55 | SpannableStringBuilder builder = new SpannableStringBuilder(text); 56 | EmojiconHandler.addEmojis(getContext(), builder, mEmojiconSize, mEmojiconAlignment, mEmojiconTextSize, mTextStart, mTextLength, mUseSystemDefault); 57 | text = builder; 58 | } 59 | super.setText(text, type); 60 | } 61 | 62 | public void setEmojiconSize(int pixels) { 63 | mEmojiconSize = pixels; 64 | super.setText(getText()); 65 | } 66 | 67 | public void setUseSystemDefault(boolean useSystemDefault) { 68 | mUseSystemDefault = useSystemDefault; 69 | } 70 | 71 | } 72 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 17 | 18 | 23 | 24 | 29 | 30 | 38 | 39 | 45 | 46 | 47 | 57 | 58 | 59 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | -------------------------------------------------------------------------------- /app/src/main/java/com/green/hand/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.green.hand; 2 | 3 | import android.os.Bundle; 4 | import androidx.appcompat.app.AppCompatActivity; 5 | import android.view.KeyEvent; 6 | import android.view.View; 7 | import android.view.View.OnClickListener; 8 | import android.widget.ImageView; 9 | import android.widget.TextView; 10 | 11 | import com.green.hand.emoji.R; 12 | import com.green.hand.library.widget.EmojiBoard; 13 | import com.green.hand.library.widget.EmojiEdittext; 14 | import com.green.hand.library.widget.EmojiTextview; 15 | 16 | import static android.view.View.GONE; 17 | import static android.view.View.VISIBLE; 18 | 19 | public class MainActivity extends AppCompatActivity implements OnClickListener { 20 | 21 | private EmojiEdittext textEditor; 22 | private ImageView emojiBtn; 23 | private TextView sendBtn; 24 | private EmojiBoard emojiBoard; 25 | private EmojiTextview messageContent; 26 | private String messages = "";//显示内容 27 | 28 | @Override 29 | protected void onCreate(Bundle savedInstanceState) { 30 | super.onCreate(savedInstanceState); 31 | setContentView(R.layout.activity_main); 32 | finID(); 33 | textEditor.isEnable(sendBtn);//这里是为了让未输入内容的时候不让点击 34 | emojiBoard.setItemClickListener(new EmojiBoard.OnEmojiItemClickListener() {//表情框点击事件 35 | @Override 36 | public void onClick(String code) { 37 | if (code.equals("/DEL")) {//删除图标 38 | textEditor.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL)); 39 | } else {//插入表情 40 | textEditor.getText().insert(textEditor.getSelectionStart(), code); 41 | } 42 | } 43 | }); 44 | } 45 | 46 | /** 47 | * findViewById 48 | */ 49 | private void finID() { 50 | textEditor = findViewById(R.id.input_editor); 51 | emojiBtn = findViewById(R.id.input_emoji_btn); 52 | sendBtn = findViewById(R.id.input_send); 53 | emojiBoard = findViewById(R.id.input_emoji_board); 54 | messageContent = findViewById(R.id.message_content); 55 | emojiBtn.setOnClickListener(this); 56 | sendBtn.setOnClickListener(this); 57 | } 58 | 59 | @Override 60 | public void onBackPressed() {//监听返回键,如果表情框已显示就隐藏 61 | if (emojiBoard.getVisibility() == VISIBLE) { 62 | showEmojiBoard(); 63 | } else { 64 | super.onBackPressed(); 65 | } 66 | } 67 | 68 | /** 69 | * 展开or隐藏表情框 70 | */ 71 | public void showEmojiBoard() { 72 | emojiBtn.setSelected(emojiBoard.getVisibility() == GONE);//设置图片选中效果 73 | emojiBoard.showBoard();//是否显示表情框 74 | } 75 | 76 | @Override 77 | public void onClick(View view) { 78 | switch (view.getId()) { 79 | case R.id.input_emoji_btn://表情按钮 80 | showEmojiBoard(); 81 | break; 82 | case R.id.input_send://发送按钮 83 | messages = messages + textEditor.getText().toString(); 84 | messageContent.setText(messages); 85 | textEditor.getText().clear(); 86 | break; 87 | } 88 | } 89 | } 90 | -------------------------------------------------------------------------------- /library/src/main/java/com/green/hand/library/widget/EmojiEdittext.java: -------------------------------------------------------------------------------- 1 | package com.green.hand.library.widget; 2 | 3 | import android.content.Context; 4 | import android.content.res.TypedArray; 5 | import android.text.Editable; 6 | import android.text.TextWatcher; 7 | import android.text.style.DynamicDrawableSpan; 8 | import android.util.AttributeSet; 9 | import android.view.View; 10 | import android.widget.EditText; 11 | import android.widget.TextView; 12 | 13 | import com.green.hand.library.EmojiManager; 14 | import com.green.hand.library.EmojiconHandler; 15 | import com.green.hand.library.R; 16 | 17 | public class EmojiEdittext extends EditText { 18 | private View view = null; 19 | private int mEmojiconSize; 20 | private int mEmojiconAlignment; 21 | private int mEmojiconTextSize; 22 | private boolean mUseSystemDefault = false; 23 | 24 | public EmojiEdittext(Context context) { 25 | super(context); 26 | initView(null); 27 | } 28 | 29 | public EmojiEdittext(Context context, AttributeSet attrs) { 30 | super(context, attrs); 31 | initView(attrs); 32 | } 33 | 34 | public EmojiEdittext(Context context, AttributeSet attrs, int defStyleAttr) { 35 | super(context, attrs, defStyleAttr); 36 | initView(attrs); 37 | } 38 | 39 | private void initView(AttributeSet attrs) { 40 | mEmojiconSize = (int) getTextSize(); 41 | mEmojiconTextSize = (int) getTextSize(); 42 | if (attrs != null) { 43 | TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.Emojicon); 44 | mEmojiconSize = (int) a.getDimension(R.styleable.Emojicon_emojiconSize, getTextSize()); 45 | mEmojiconAlignment = a.getInt(R.styleable.Emojicon_emojiconAlignment, DynamicDrawableSpan.ALIGN_BASELINE); 46 | mUseSystemDefault = a.getBoolean(R.styleable.Emojicon_emojiconUseSystemDefault, false); 47 | a.recycle(); 48 | } 49 | setText(getText()); 50 | addTextChangedListener(textWatcher); 51 | } 52 | 53 | private TextWatcher textWatcher = new TextWatcher() { 54 | @Override 55 | public void beforeTextChanged(CharSequence s, int start, int count, int after) { 56 | 57 | } 58 | 59 | @Override 60 | public void onTextChanged(CharSequence s, int start, int before, int count) { 61 | 62 | } 63 | 64 | @Override 65 | public void afterTextChanged(Editable editable) { 66 | if (view != null) 67 | view.setEnabled(!editable.toString().isEmpty());//输入完不为空内容才可以点击 68 | int start = getSelectionStart(); 69 | int end = getSelectionEnd(); 70 | removeTextChangedListener(this);//取消监听 71 | updateText(); 72 | CharSequence cs = EmojiManager.parse(editable.toString(), getTextSize()); 73 | setText(cs, TextView.BufferType.SPANNABLE); 74 | setSelection(start, end); 75 | addTextChangedListener(this); 76 | } 77 | }; 78 | 79 | public void setEmojiconSize(int pixels) { 80 | mEmojiconSize = pixels; 81 | updateText(); 82 | } 83 | 84 | private void updateText() { 85 | EmojiconHandler.addEmojis(getContext(), getText(), mEmojiconSize, mEmojiconAlignment, mEmojiconTextSize, mUseSystemDefault); 86 | } 87 | 88 | public void setUseSystemDefault(boolean useSystemDefault) { 89 | mUseSystemDefault = useSystemDefault; 90 | } 91 | 92 | /** 93 | * 未输入的时候让其他控件不能点击 94 | */ 95 | public void isEnable(View view) { 96 | this.view = view; 97 | } 98 | } 99 | -------------------------------------------------------------------------------- /.idea/codeStyles/Project.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | xmlns:android 14 | 15 | ^$ 16 | 17 | 18 | 19 |
20 |
21 | 22 | 23 | 24 | xmlns:.* 25 | 26 | ^$ 27 | 28 | 29 | BY_NAME 30 | 31 |
32 |
33 | 34 | 35 | 36 | .*:id 37 | 38 | http://schemas.android.com/apk/res/android 39 | 40 | 41 | 42 |
43 |
44 | 45 | 46 | 47 | .*:name 48 | 49 | http://schemas.android.com/apk/res/android 50 | 51 | 52 | 53 |
54 |
55 | 56 | 57 | 58 | name 59 | 60 | ^$ 61 | 62 | 63 | 64 |
65 |
66 | 67 | 68 | 69 | style 70 | 71 | ^$ 72 | 73 | 74 | 75 |
76 |
77 | 78 | 79 | 80 | .* 81 | 82 | ^$ 83 | 84 | 85 | BY_NAME 86 | 87 |
88 |
89 | 90 | 91 | 92 | .* 93 | 94 | http://schemas.android.com/apk/res/android 95 | 96 | 97 | ANDROID_ATTRIBUTE_ORDER 98 | 99 |
100 |
101 | 102 | 103 | 104 | .* 105 | 106 | .* 107 | 108 | 109 | BY_NAME 110 | 111 |
112 |
113 |
114 |
115 |
116 |
-------------------------------------------------------------------------------- /library/src/main/java/com/green/hand/library/EmojiManager.java: -------------------------------------------------------------------------------- 1 | package com.green.hand.library; 2 | 3 | import android.content.Context; 4 | import android.content.res.Resources; 5 | import android.content.res.TypedArray; 6 | import android.graphics.Bitmap; 7 | import android.graphics.BitmapFactory; 8 | import android.graphics.Canvas; 9 | import android.graphics.Paint; 10 | import android.graphics.drawable.BitmapDrawable; 11 | import android.graphics.drawable.Drawable; 12 | import android.text.SpannableStringBuilder; 13 | import android.text.Spanned; 14 | import android.text.style.ImageSpan; 15 | 16 | import java.util.ArrayList; 17 | import java.util.List; 18 | 19 | public class EmojiManager { 20 | 21 | public static Context gContext; 22 | private static List emojiCodeList = new ArrayList<>();//编码 23 | private static List emojiResourceList = new ArrayList<>();//资源文件 24 | 25 | public static void init(Context context) { 26 | gContext = context.getApplicationContext(); 27 | Resources resources = gContext.getResources(); 28 | int[] codes = resources.getIntArray(R.array.emoji_code_list); 29 | TypedArray array = resources.obtainTypedArray(R.array.emoji_res_list); 30 | if (codes.length != array.length()) {//数据长度必须一致 31 | array.recycle(); 32 | throw new IndexOutOfBoundsException("Code and resource are not match in Emoji xml."); 33 | } 34 | for (int i = 0; i < codes.length; i++) { 35 | emojiCodeList.add(codes[i]); 36 | emojiResourceList.add(array.getResourceId(i, -1)); 37 | } 38 | array.recycle(); 39 | } 40 | 41 | public static int getSize() {//得到总数据 42 | return emojiCodeList.size(); 43 | } 44 | 45 | public static int getCode(int position) {//得到编码 46 | return emojiCodeList.get(position); 47 | } 48 | 49 | public static List getResourceList(int start, int count) {//得到每页的数据 50 | return new ArrayList<>(emojiResourceList.subList(start, count)); 51 | } 52 | 53 | private static int getResourceByCode(int code) throws Resources.NotFoundException { 54 | for (int i = 0; i < emojiCodeList.size(); i++) { 55 | if (emojiCodeList.get(i) == code) 56 | return emojiResourceList.get(i); 57 | } 58 | throw new Resources.NotFoundException("Unsupported emoji code <" + code + ">, which is not in Emoji list."); 59 | } 60 | 61 | public static CharSequence parse(String text, float textSize) { 62 | if (text == null) 63 | return ""; 64 | final char[] chars = text.toCharArray(); 65 | final SpannableStringBuilder ssb = new SpannableStringBuilder(text); 66 | int codePoint; 67 | boolean isSurrogatePair; 68 | for (int i = 0; i < chars.length; i++) { 69 | if (Character.isHighSurrogate(chars[i])) { 70 | continue; 71 | } else if (Character.isLowSurrogate(chars[i])) { 72 | if (i > 0 && Character.isSurrogatePair(chars[i - 1], chars[i])) { 73 | codePoint = Character.toCodePoint(chars[i - 1], chars[i]); 74 | isSurrogatePair = true; 75 | } else { 76 | continue; 77 | } 78 | } else { 79 | codePoint = (int) chars[i]; 80 | isSurrogatePair = false; 81 | } 82 | if (emojiCodeList.contains(codePoint)) { 83 | Bitmap bitmap = BitmapFactory.decodeResource(gContext.getResources(), getResourceByCode(codePoint)); 84 | BitmapDrawable bmpDrawable = new BitmapDrawable(gContext.getResources(), bitmap); 85 | bmpDrawable.setBounds(0, 0, (int) textSize, (int) textSize); 86 | CenterImageSpan imageSpan = new CenterImageSpan(bmpDrawable); 87 | ssb.setSpan(imageSpan, isSurrogatePair ? i - 1 : i, i + 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 88 | } 89 | } 90 | return ssb; 91 | } 92 | 93 | private static class CenterImageSpan extends ImageSpan { 94 | 95 | public CenterImageSpan(Drawable draw) { 96 | super(draw); 97 | } 98 | 99 | @Override 100 | public void draw(Canvas canvas, CharSequence text, int start, int end, float x, int top, int y, int bottom, Paint paint) { 101 | Drawable b = getDrawable(); 102 | int transY = ((bottom - top) - getDrawable().getBounds().bottom) / 2 + top; 103 | canvas.save(); 104 | canvas.translate(x, transY); 105 | b.draw(canvas); 106 | canvas.restore(); 107 | } 108 | } 109 | } 110 | -------------------------------------------------------------------------------- /gradlew: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | ############################################################################## 4 | ## 5 | ## Gradle start up script for UN*X 6 | ## 7 | ############################################################################## 8 | 9 | # Attempt to set APP_HOME 10 | # Resolve links: $0 may be a link 11 | PRG="$0" 12 | # Need this for relative symlinks. 13 | while [ -h "$PRG" ] ; do 14 | ls=`ls -ld "$PRG"` 15 | link=`expr "$ls" : '.*-> \(.*\)$'` 16 | if expr "$link" : '/.*' > /dev/null; then 17 | PRG="$link" 18 | else 19 | PRG=`dirname "$PRG"`"/$link" 20 | fi 21 | done 22 | SAVED="`pwd`" 23 | cd "`dirname \"$PRG\"`/" >/dev/null 24 | APP_HOME="`pwd -P`" 25 | cd "$SAVED" >/dev/null 26 | 27 | APP_NAME="Gradle" 28 | APP_BASE_NAME=`basename "$0"` 29 | 30 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 31 | DEFAULT_JVM_OPTS="" 32 | 33 | # Use the maximum available, or set MAX_FD != -1 to use that value. 34 | MAX_FD="maximum" 35 | 36 | warn () { 37 | echo "$*" 38 | } 39 | 40 | die () { 41 | echo 42 | echo "$*" 43 | echo 44 | exit 1 45 | } 46 | 47 | # OS specific support (must be 'true' or 'false'). 48 | cygwin=false 49 | msys=false 50 | darwin=false 51 | nonstop=false 52 | case "`uname`" in 53 | CYGWIN* ) 54 | cygwin=true 55 | ;; 56 | Darwin* ) 57 | darwin=true 58 | ;; 59 | MINGW* ) 60 | msys=true 61 | ;; 62 | NONSTOP* ) 63 | nonstop=true 64 | ;; 65 | esac 66 | 67 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar 68 | 69 | # Determine the Java command to use to start the JVM. 70 | if [ -n "$JAVA_HOME" ] ; then 71 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 72 | # IBM's JDK on AIX uses strange locations for the executables 73 | JAVACMD="$JAVA_HOME/jre/sh/java" 74 | else 75 | JAVACMD="$JAVA_HOME/bin/java" 76 | fi 77 | if [ ! -x "$JAVACMD" ] ; then 78 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME 79 | 80 | Please set the JAVA_HOME variable in your environment to match the 81 | location of your Java installation." 82 | fi 83 | else 84 | JAVACMD="java" 85 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 86 | 87 | Please set the JAVA_HOME variable in your environment to match the 88 | location of your Java installation." 89 | fi 90 | 91 | # Increase the maximum file descriptors if we can. 92 | if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then 93 | MAX_FD_LIMIT=`ulimit -H -n` 94 | if [ $? -eq 0 ] ; then 95 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then 96 | MAX_FD="$MAX_FD_LIMIT" 97 | fi 98 | ulimit -n $MAX_FD 99 | if [ $? -ne 0 ] ; then 100 | warn "Could not set maximum file descriptor limit: $MAX_FD" 101 | fi 102 | else 103 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" 104 | fi 105 | fi 106 | 107 | # For Darwin, add options to specify how the application appears in the dock 108 | if $darwin; then 109 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" 110 | fi 111 | 112 | # For Cygwin, switch paths to Windows format before running java 113 | if $cygwin ; then 114 | APP_HOME=`cygpath --path --mixed "$APP_HOME"` 115 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` 116 | JAVACMD=`cygpath --unix "$JAVACMD"` 117 | 118 | # We build the pattern for arguments to be converted via cygpath 119 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` 120 | SEP="" 121 | for dir in $ROOTDIRSRAW ; do 122 | ROOTDIRS="$ROOTDIRS$SEP$dir" 123 | SEP="|" 124 | done 125 | OURCYGPATTERN="(^($ROOTDIRS))" 126 | # Add a user-defined pattern to the cygpath arguments 127 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then 128 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" 129 | fi 130 | # Now convert the arguments - kludge to limit ourselves to /bin/sh 131 | i=0 132 | for arg in "$@" ; do 133 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` 134 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option 135 | 136 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition 137 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` 138 | else 139 | eval `echo args$i`="\"$arg\"" 140 | fi 141 | i=$((i+1)) 142 | done 143 | case $i in 144 | (0) set -- ;; 145 | (1) set -- "$args0" ;; 146 | (2) set -- "$args0" "$args1" ;; 147 | (3) set -- "$args0" "$args1" "$args2" ;; 148 | (4) set -- "$args0" "$args1" "$args2" "$args3" ;; 149 | (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; 150 | (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; 151 | (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; 152 | (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; 153 | (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; 154 | esac 155 | fi 156 | 157 | # Escape application args 158 | save () { 159 | for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done 160 | echo " " 161 | } 162 | APP_ARGS=$(save "$@") 163 | 164 | # Collect all arguments for the java command, following the shell quoting and substitution rules 165 | eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" 166 | 167 | # by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong 168 | if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then 169 | cd "$(dirname "$0")" 170 | fi 171 | 172 | exec "$JAVACMD" "$@" 173 | -------------------------------------------------------------------------------- /library/src/main/java/com/green/hand/library/EmojiconHandler.java: -------------------------------------------------------------------------------- 1 | package com.green.hand.library; 2 | 3 | import android.content.Context; 4 | import android.text.Spannable; 5 | import android.util.SparseIntArray; 6 | 7 | public class EmojiconHandler { 8 | private EmojiconHandler() { 9 | } 10 | 11 | private static final SparseIntArray sEmojisMap = new SparseIntArray(1029); 12 | 13 | static { 14 | sEmojisMap.put(0x1f603, R.mipmap.u1f603); 15 | sEmojisMap.put(0x1f600, R.mipmap.u1f600); 16 | sEmojisMap.put(0x1f60a, R.mipmap.u1f60a); 17 | sEmojisMap.put(0x263a, R.mipmap.u263a); 18 | sEmojisMap.put(0x1f609, R.mipmap.u1f609); 19 | sEmojisMap.put(0x1f60d, R.mipmap.u1f60d); 20 | sEmojisMap.put(0x1f618, R.mipmap.u1f618); 21 | sEmojisMap.put(0x1f61a, R.mipmap.u1f61a); 22 | sEmojisMap.put(0x1f61c, R.mipmap.u1f61c); 23 | sEmojisMap.put(0x1f61d, R.mipmap.u1f61d); 24 | sEmojisMap.put(0x1f633, R.mipmap.u1f633); 25 | sEmojisMap.put(0x1f601, R.mipmap.u1f601); 26 | sEmojisMap.put(0x1f614, R.mipmap.u1f614); 27 | sEmojisMap.put(0x1f60c, R.mipmap.u1f60c); 28 | sEmojisMap.put(0x1ff12, R.mipmap.u1f12); 29 | sEmojisMap.put(0x1f61f, R.mipmap.u1f61f); 30 | sEmojisMap.put(0x1f61e, R.mipmap.u1f61e); 31 | sEmojisMap.put(0x1f623, R.mipmap.u1f623); 32 | sEmojisMap.put(0x1f622, R.mipmap.u1f622); 33 | sEmojisMap.put(0x1f602, R.mipmap.u1f602); 34 | sEmojisMap.put(0x1f62d, R.mipmap.u1f62d); 35 | sEmojisMap.put(0x1f62a, R.mipmap.u1f62a); 36 | sEmojisMap.put(0x1f630, R.mipmap.u1f630); 37 | sEmojisMap.put(0x1f605, R.mipmap.u1f605); 38 | sEmojisMap.put(0x1f613, R.mipmap.u1f613); 39 | sEmojisMap.put(0x1f62b, R.mipmap.u1f62b); 40 | sEmojisMap.put(0x1f629, R.mipmap.u1f629); 41 | sEmojisMap.put(0x1f628, R.mipmap.u1f628); 42 | sEmojisMap.put(0x1f631, R.mipmap.u1f631); 43 | sEmojisMap.put(0x1f621, R.mipmap.u1f621); 44 | sEmojisMap.put(0x1f624, R.mipmap.u1f624); 45 | sEmojisMap.put(0x1f616, R.mipmap.u1f616); 46 | sEmojisMap.put(0x1f606, R.mipmap.u1f606); 47 | sEmojisMap.put(0x1f60b, R.mipmap.u1f60b); 48 | sEmojisMap.put(0x1f637, R.mipmap.u1f637); 49 | sEmojisMap.put(0x1f60e, R.mipmap.u1f60e); 50 | sEmojisMap.put(0x1f634, R.mipmap.u1f634); 51 | sEmojisMap.put(0x1f632, R.mipmap.u1f632); 52 | sEmojisMap.put(0x1f62e, R.mipmap.u1f62e); 53 | sEmojisMap.put(0x1f608, R.mipmap.u1f608); 54 | sEmojisMap.put(0x1f47f, R.mipmap.u1f47f); 55 | sEmojisMap.put(0x1f62f, R.mipmap.u1f62f); 56 | sEmojisMap.put(0x1f62c, R.mipmap.u1f62c); 57 | sEmojisMap.put(0x1f615, R.mipmap.u1f615); 58 | sEmojisMap.put(0x1f635, R.mipmap.u1f635); 59 | sEmojisMap.put(0x1f636, R.mipmap.u1f636); 60 | sEmojisMap.put(0x1f607, R.mipmap.u1f607); 61 | sEmojisMap.put(0x1f60f, R.mipmap.u1f60f); 62 | sEmojisMap.put(0x1f611, R.mipmap.u1f611); 63 | sEmojisMap.put(0x1f648, R.mipmap.u1f648); 64 | sEmojisMap.put(0x1f649, R.mipmap.u1f649); 65 | sEmojisMap.put(0x1f64a, R.mipmap.u1f64a); 66 | sEmojisMap.put(0x1f47d, R.mipmap.u1f47d); 67 | sEmojisMap.put(0x1f4a9, R.mipmap.u1f4a9); 68 | sEmojisMap.put(0x2764, R.mipmap.u2764); 69 | sEmojisMap.put(0x1f494, R.mipmap.u1f494); 70 | sEmojisMap.put(0x1f525, R.mipmap.u1f525); 71 | sEmojisMap.put(0x1f4a2, R.mipmap.u1f4a2); 72 | sEmojisMap.put(0x1f4a4, R.mipmap.u1f4a4); 73 | sEmojisMap.put(0x1f6ab, R.mipmap.u1f6ab); 74 | sEmojisMap.put(0x2b50, R.mipmap.u2b50); 75 | sEmojisMap.put(0x26a1, R.mipmap.u26a1); 76 | sEmojisMap.put(0x1f319, R.mipmap.u1f319); 77 | sEmojisMap.put(0x2600, R.mipmap.u2600); 78 | sEmojisMap.put(0x26c5, R.mipmap.u26c5); 79 | sEmojisMap.put(0x2601, R.mipmap.u2601); 80 | sEmojisMap.put(0x2744, R.mipmap.u2744); 81 | sEmojisMap.put(0x2614, R.mipmap.u2614); 82 | sEmojisMap.put(0x26c4, R.mipmap.u26c4); 83 | sEmojisMap.put(0x1f44d, R.mipmap.u1f44d); 84 | sEmojisMap.put(0x1f44e, R.mipmap.u1f44e); 85 | sEmojisMap.put(0x1f44c, R.mipmap.u1f44c); 86 | sEmojisMap.put(0x1f44a, R.mipmap.u1f44a); 87 | sEmojisMap.put(0x270a, R.mipmap.u270a); 88 | sEmojisMap.put(0x270c, R.mipmap.u270c); 89 | sEmojisMap.put(0x270b, R.mipmap.u270b); 90 | sEmojisMap.put(0x1f64f, R.mipmap.u1f64f); 91 | sEmojisMap.put(0x261d, R.mipmap.u261d); 92 | sEmojisMap.put(0x1f44f, R.mipmap.u1f44f); 93 | sEmojisMap.put(0x1f91d, R.mipmap.u1f91d); 94 | sEmojisMap.put(0x1f4aa, R.mipmap.u1f4aa); 95 | sEmojisMap.put(0x1f46a, R.mipmap.u1f46a); 96 | sEmojisMap.put(0x1f46b, R.mipmap.u1f46b); 97 | sEmojisMap.put(0x1f47c, R.mipmap.u1f47c); 98 | sEmojisMap.put(0x1f434, R.mipmap.u1f434); 99 | sEmojisMap.put(0x1f436, R.mipmap.u1f436); 100 | sEmojisMap.put(0x1f437, R.mipmap.u1f437); 101 | sEmojisMap.put(0x1f47b, R.mipmap.u1f47b); 102 | sEmojisMap.put(0x1f339, R.mipmap.u1f339); 103 | sEmojisMap.put(0x1f33b, R.mipmap.u1f33b); 104 | sEmojisMap.put(0x1f332, R.mipmap.u1f332); 105 | sEmojisMap.put(0x1f384, R.mipmap.u1f384); 106 | sEmojisMap.put(0x1f381, R.mipmap.u1f381); 107 | sEmojisMap.put(0x1f389, R.mipmap.u1f389); 108 | sEmojisMap.put(0x1f4b0, R.mipmap.u1f4b0); 109 | sEmojisMap.put(0x1f382, R.mipmap.u1f382); 110 | sEmojisMap.put(0x1f356, R.mipmap.u1f356); 111 | sEmojisMap.put(0x1f35a, R.mipmap.u1f35a); 112 | sEmojisMap.put(0x1f366, R.mipmap.u1f366); 113 | sEmojisMap.put(0x1f36b, R.mipmap.u1f36b); 114 | sEmojisMap.put(0x1f349, R.mipmap.u1f349); 115 | sEmojisMap.put(0x1f377, R.mipmap.u1f377); 116 | sEmojisMap.put(0x1f37b, R.mipmap.u1f37b); 117 | sEmojisMap.put(0x2615, R.mipmap.u2615); 118 | sEmojisMap.put(0x1f3c0, R.mipmap.u1f3c0); 119 | sEmojisMap.put(0x26bd, R.mipmap.u26bd); 120 | sEmojisMap.put(0x1f3c2, R.mipmap.u1f3c2); 121 | sEmojisMap.put(0x1f6b2, R.mipmap.u1f6b2); 122 | sEmojisMap.put(0x1f3a4, R.mipmap.u1f3a4); 123 | sEmojisMap.put(0x1f3b5, R.mipmap.u1f3b5); 124 | sEmojisMap.put(0x1f3b2, R.mipmap.u1f3b2); 125 | sEmojisMap.put(0x1f004, R.mipmap.u1f004); 126 | sEmojisMap.put(0x1f451, R.mipmap.u1f451); 127 | sEmojisMap.put(0x1f484, R.mipmap.u1f484); 128 | sEmojisMap.put(0x1f48b, R.mipmap.u1f48b); 129 | sEmojisMap.put(0x1f48d, R.mipmap.u1f48d); 130 | sEmojisMap.put(0x1f4da, R.mipmap.u1f4da); 131 | sEmojisMap.put(0x1f393, R.mipmap.u1f393); 132 | sEmojisMap.put(0x270f, R.mipmap.u270f); 133 | sEmojisMap.put(0x1f3e1, R.mipmap.u1f3e1); 134 | sEmojisMap.put(0x1f6bf, R.mipmap.u1f6bf); 135 | sEmojisMap.put(0x1f4a1, R.mipmap.u1f4a1); 136 | sEmojisMap.put(0x1f4de, R.mipmap.u1f4de); 137 | sEmojisMap.put(0x1f4e2, R.mipmap.u1f4e2); 138 | sEmojisMap.put(0x1f556, R.mipmap.u1f556); 139 | sEmojisMap.put(0x23f0, R.mipmap.u23f0); 140 | sEmojisMap.put(0x23f3, R.mipmap.u23f3); 141 | sEmojisMap.put(0x1f4a3, R.mipmap.u1f4a3); 142 | sEmojisMap.put(0x1f52b, R.mipmap.u1f52b); 143 | sEmojisMap.put(0x1f48a, R.mipmap.u1f48a); 144 | sEmojisMap.put(0x1f680, R.mipmap.u1f680); 145 | sEmojisMap.put(0x1f30f, R.mipmap.u1f30f); 146 | } 147 | 148 | public static void addEmojis(Context context, Spannable text, int emojiSize, int emojiAlignment, int textSize, boolean useSystemDefault) { 149 | addEmojis(context, text, emojiSize, emojiAlignment, textSize, 0, -1, useSystemDefault); 150 | } 151 | 152 | public static void addEmojis(Context context, Spannable text, int emojiSize, int emojiAlignment, int textSize, int index, int length, boolean useSystemDefault) { 153 | if (useSystemDefault || text == null) { 154 | return; 155 | } 156 | int textLength = text.length(); 157 | int textLengthToProcessMax = textLength - index; 158 | int textLengthToProcess = length < 0 || length >= textLengthToProcessMax ? textLength : (length + index); 159 | EmojiconSpan[] oldSpans = text.getSpans(0, textLength, EmojiconSpan.class); 160 | for (int i = 0; i < oldSpans.length; i++) { 161 | text.removeSpan(oldSpans[i]); 162 | } 163 | int skip; 164 | for (int i = index; i < textLengthToProcess; i += skip) { 165 | int icon = 0; 166 | int unicode = Character.codePointAt(text, i); 167 | skip = Character.charCount(unicode); 168 | if (unicode > 0xff) { 169 | icon = sEmojisMap.get(unicode); 170 | } 171 | if (icon > 0) { 172 | text.setSpan(new EmojiconSpan(context, icon, emojiSize, emojiAlignment, textSize), i, i + skip, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 173 | } 174 | } 175 | } 176 | } 177 | -------------------------------------------------------------------------------- /library/src/main/java/com/green/hand/library/widget/EmojiBoard.java: -------------------------------------------------------------------------------- 1 | package com.green.hand.library.widget; 2 | 3 | import android.content.Context; 4 | import android.content.res.TypedArray; 5 | import androidx.viewpager.widget.PagerAdapter; 6 | import androidx.viewpager.widget.ViewPager; 7 | import androidx.recyclerview.widget.GridLayoutManager; 8 | import androidx.recyclerview.widget.RecyclerView; 9 | import android.util.AttributeSet; 10 | import android.view.LayoutInflater; 11 | import android.view.View; 12 | import android.view.ViewGroup; 13 | import android.widget.ImageView; 14 | import android.widget.LinearLayout; 15 | 16 | import com.green.hand.library.EmojiGridAdapter; 17 | import com.green.hand.library.EmojiManager; 18 | import com.green.hand.library.EmojiUtil; 19 | import com.green.hand.library.R; 20 | 21 | import java.util.ArrayList; 22 | import java.util.List; 23 | 24 | 25 | public class EmojiBoard extends LinearLayout { 26 | 27 | private ViewPager viewPager; 28 | private Indicator indicator; 29 | private OnEmojiItemClickListener listener; 30 | private int deleteIcon = -1;//删除按钮 31 | private int emojiIndicator = -1;//选中小圆点图片 32 | private int emojiIndicatorHover = -1;//未选中小圆点图片 33 | private Context context; 34 | 35 | public interface OnEmojiItemClickListener { 36 | void onClick(String code); 37 | } 38 | 39 | public EmojiBoard(Context context) { 40 | super(context); 41 | this.context = context; 42 | initView(null); 43 | } 44 | 45 | public EmojiBoard(Context context, AttributeSet attrs) { 46 | super(context, attrs); 47 | this.context = context; 48 | initView(attrs); 49 | } 50 | 51 | public EmojiBoard(Context context, AttributeSet attrs, int defStyleAttr) { 52 | super(context, attrs, defStyleAttr); 53 | this.context = context; 54 | initView(attrs); 55 | } 56 | 57 | private void initView(AttributeSet attrs) { 58 | LayoutInflater.from(getContext()).inflate(R.layout.input_emoji_board, this); 59 | viewPager = findViewById(R.id.view_pager); 60 | indicator = new Indicator((ViewGroup) findViewById(R.id.indicator)); 61 | viewPager.setAdapter(new EmojiPageAdapter()); 62 | viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { 63 | @Override 64 | public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { 65 | } 66 | 67 | @Override 68 | public void onPageSelected(int position) { 69 | indicator.setSelected(position); 70 | } 71 | 72 | @Override 73 | public void onPageScrollStateChanged(int state) { 74 | } 75 | }); 76 | if (attrs != null) { 77 | TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.EmojiBoard); 78 | deleteIcon = array.getResourceId(R.styleable.EmojiBoard_deleteIcon, -1); 79 | emojiIndicator = array.getResourceId(R.styleable.EmojiBoard_emojiIndicator, -1); 80 | emojiIndicatorHover = array.getResourceId(R.styleable.EmojiBoard_emojiIndicatorHover, -1); 81 | array.recycle(); 82 | } 83 | } 84 | 85 | public void setItemClickListener(OnEmojiItemClickListener listener) { 86 | this.listener = listener; 87 | } 88 | 89 | private class EmojiPageAdapter extends PagerAdapter { 90 | 91 | private List viewContainer = new ArrayList<>(); 92 | 93 | public EmojiPageAdapter() { 94 | int pageSize = EmojiUtil.getPageSize(); 95 | for (int i = 0; i < pageSize; i++) { 96 | RecyclerView recyclerView = new RecyclerView(context); 97 | recyclerView.setLayoutManager(new GridLayoutManager(context, 7)); 98 | final EmojiGridAdapter adapter = new EmojiGridAdapter(); 99 | int start = i * (EmojiUtil.getOnePageSize()); 100 | int endIndex = (i + 1) * (EmojiUtil.getOnePageSize()); 101 | if (EmojiManager.getSize() < endIndex)//最后一页数量不够填充一页 102 | endIndex = EmojiManager.getSize(); 103 | if (isInEditMode()) { 104 | return; 105 | } 106 | final List list = EmojiManager.getResourceList(start, endIndex);//获取每一页的数据量 107 | if (deleteIcon == -1)//每页数据后面添加一个删除按钮 108 | list.add(R.mipmap.input_emoji_delete); 109 | else 110 | list.add(deleteIcon); 111 | adapter.setResList(list); 112 | recyclerView.setAdapter(adapter); 113 | adapter.setOnEmojiClick(new EmojiGridAdapter.EmojiClick() { 114 | @Override 115 | public void onClick(int position) { 116 | if (listener != null) { 117 | String code = ""; 118 | if (position == adapter.getItemCount() - 1) {//点击的为每页最后一个数据,即为删除按钮 119 | code = "/DEL"; 120 | } else { 121 | int pos = viewPager.getCurrentItem() * (EmojiUtil.getOnePageSize()) + position; 122 | char[] chars = Character.toChars(EmojiManager.getCode(pos)); 123 | for (int i = 0; i < chars.length; i++) { 124 | code += Character.toString(chars[i]); 125 | } 126 | } 127 | listener.onClick(code); 128 | } 129 | } 130 | }); 131 | viewContainer.add(recyclerView); 132 | } 133 | } 134 | 135 | @Override 136 | public int getCount() { 137 | return viewContainer.size(); 138 | } 139 | 140 | @Override 141 | public boolean isViewFromObject(View view, Object object) { 142 | return view == object; 143 | } 144 | 145 | @Override 146 | public Object instantiateItem(ViewGroup container, int position) { 147 | container.addView(viewContainer.get(position)); 148 | return viewContainer.get(position); 149 | } 150 | 151 | @Override 152 | public void destroyItem(ViewGroup container, int position, Object object) { 153 | container.removeView((View) object); 154 | } 155 | 156 | } 157 | 158 | /** 159 | * 底部小圆点 160 | */ 161 | private class Indicator { 162 | private ViewGroup rootView; 163 | private List imageList = new ArrayList<>(); 164 | 165 | public Indicator(ViewGroup root) { 166 | rootView = root; 167 | int pageSize = EmojiUtil.getPageSize(); 168 | for (int i = 0; i < pageSize; i++) {//多少页数据就有多少个小圆点 169 | ImageView imageView = new ImageView(getContext()); 170 | LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); 171 | int px = (int) (4 * context.getResources().getDisplayMetrics().density + 0.5f);//设置间距 172 | params.setMargins(px, 0, px, 0); 173 | imageView.setLayoutParams(params); 174 | if (i == 0) { 175 | if (emojiIndicatorHover == -1) 176 | imageView.setImageResource(R.mipmap.input_emoji_indicator_hover); 177 | else 178 | imageView.setImageResource(emojiIndicatorHover); 179 | } else { 180 | if (emojiIndicator == -1) 181 | imageView.setImageResource(R.mipmap.input_emoji_indicator); 182 | else 183 | imageView.setImageResource(emojiIndicator); 184 | } 185 | imageList.add(imageView); 186 | rootView.addView(imageView); 187 | } 188 | } 189 | 190 | public void setSelected(int position) { 191 | for (int i = 0; i < imageList.size(); i++) { 192 | if (i != position) { 193 | if (emojiIndicator == -1) 194 | imageList.get(i).setImageResource(R.mipmap.input_emoji_indicator); 195 | else 196 | imageList.get(i).setImageResource(emojiIndicator); 197 | } else { 198 | if (emojiIndicatorHover == -1) 199 | imageList.get(i).setImageResource(R.mipmap.input_emoji_indicator_hover); 200 | else 201 | imageList.get(i).setImageResource(emojiIndicatorHover); 202 | } 203 | } 204 | } 205 | } 206 | 207 | /** 208 | * 是否显示表情框 209 | */ 210 | public void showBoard() { 211 | setVisibility(getVisibility() == VISIBLE ? GONE : VISIBLE); 212 | } 213 | } 214 | -------------------------------------------------------------------------------- /library/src/main/res/values/emoji_map.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | @mipmap/u1f603 5 | @mipmap/u1f600 6 | @mipmap/u1f60a 7 | @mipmap/u263a 8 | @mipmap/u1f609 9 | @mipmap/u1f60d 10 | @mipmap/u1f618 11 | @mipmap/u1f61a 12 | @mipmap/u1f61c 13 | @mipmap/u1f61d 14 | @mipmap/u1f633 15 | @mipmap/u1f601 16 | @mipmap/u1f614 17 | @mipmap/u1f60c 18 | @mipmap/u1f12 19 | @mipmap/u1f61f 20 | @mipmap/u1f61e 21 | @mipmap/u1f623 22 | @mipmap/u1f622 23 | @mipmap/u1f602 24 | @mipmap/u1f62d 25 | @mipmap/u1f62a 26 | @mipmap/u1f630 27 | @mipmap/u1f605 28 | @mipmap/u1f613 29 | @mipmap/u1f62b 30 | @mipmap/u1f629 31 | @mipmap/u1f628 32 | @mipmap/u1f631 33 | @mipmap/u1f621 34 | @mipmap/u1f624 35 | @mipmap/u1f616 36 | @mipmap/u1f606 37 | @mipmap/u1f60b 38 | @mipmap/u1f637 39 | @mipmap/u1f60e 40 | @mipmap/u1f634 41 | @mipmap/u1f632 42 | @mipmap/u1f62e 43 | @mipmap/u1f608 44 | @mipmap/u1f47f 45 | @mipmap/u1f62f 46 | @mipmap/u1f62c 47 | @mipmap/u1f615 48 | @mipmap/u1f635 49 | @mipmap/u1f636 50 | @mipmap/u1f607 51 | @mipmap/u1f60f 52 | @mipmap/u1f611 53 | @mipmap/u1f648 54 | @mipmap/u1f649 55 | @mipmap/u1f64a 56 | @mipmap/u1f47d 57 | @mipmap/u1f4a9 58 | @mipmap/u2764 59 | @mipmap/u1f494 60 | @mipmap/u1f525 61 | @mipmap/u1f4a2 62 | @mipmap/u1f4a4 63 | @mipmap/u1f6ab 64 | @mipmap/u2b50 65 | @mipmap/u26a1 66 | @mipmap/u1f319 67 | @mipmap/u2600 68 | @mipmap/u26c5 69 | @mipmap/u2601 70 | @mipmap/u2744 71 | @mipmap/u2614 72 | @mipmap/u26c4 73 | @mipmap/u1f44d 74 | @mipmap/u1f44e 75 | @mipmap/u1f44c 76 | @mipmap/u1f44a 77 | @mipmap/u270a 78 | @mipmap/u270c 79 | @mipmap/u270b 80 | @mipmap/u1f64f 81 | @mipmap/u261d 82 | @mipmap/u1f44f 83 | @mipmap/u1f91d 84 | @mipmap/u1f4aa 85 | @mipmap/u1f46a 86 | @mipmap/u1f46b 87 | @mipmap/u1f47c 88 | @mipmap/u1f434 89 | @mipmap/u1f436 90 | @mipmap/u1f437 91 | @mipmap/u1f47b 92 | @mipmap/u1f339 93 | @mipmap/u1f33b 94 | @mipmap/u1f332 95 | @mipmap/u1f384 96 | @mipmap/u1f381 97 | @mipmap/u1f389 98 | @mipmap/u1f4b0 99 | @mipmap/u1f382 100 | @mipmap/u1f356 101 | @mipmap/u1f35a 102 | @mipmap/u1f366 103 | @mipmap/u1f36b 104 | @mipmap/u1f349 105 | @mipmap/u1f377 106 | @mipmap/u1f37b 107 | @mipmap/u2615 108 | @mipmap/u1f3c0 109 | @mipmap/u26bd 110 | @mipmap/u1f3c2 111 | @mipmap/u1f6b2 112 | @mipmap/u1f3a4 113 | @mipmap/u1f3b5 114 | @mipmap/u1f3b2 115 | @mipmap/u1f004 116 | @mipmap/u1f451 117 | @mipmap/u1f484 118 | @mipmap/u1f48b 119 | @mipmap/u1f48d 120 | @mipmap/u1f4da 121 | @mipmap/u1f393 122 | @mipmap/u270f 123 | @mipmap/u1f3e1 124 | @mipmap/u1f6bf 125 | @mipmap/u1f4a1 126 | @mipmap/u1f4de 127 | @mipmap/u1f4e2 128 | @mipmap/u1f556 129 | @mipmap/u23f0 130 | @mipmap/u23f3 131 | @mipmap/u1f4a3 132 | @mipmap/u1f52b 133 | @mipmap/u1f48a 134 | @mipmap/u1f680 135 | @mipmap/u1f30f 136 | 137 | 138 | 139 | 0x1f603 140 | 0x1f600 141 | 0x1f60a 142 | 0x263a 143 | 0x1f609 144 | 0x1f60d 145 | 0x1f618 146 | 0x1f61a 147 | 0x1f61c 148 | 0x1f61d 149 | 0x1f633 150 | 0x1f601 151 | 0x1f614 152 | 0x1f60c 153 | 0x1ff12 154 | 0x1f61f 155 | 0x1f61e 156 | 0x1f623 157 | 0x1f622 158 | 0x1f602 159 | 0x1f62d 160 | 0x1f62a 161 | 0x1f630 162 | 0x1f605 163 | 0x1f613 164 | 0x1f62b 165 | 0x1f629 166 | 0x1f628 167 | 0x1f631 168 | 0x1f621 169 | 0x1f624 170 | 0x1f616 171 | 0x1f606 172 | 0x1f60b 173 | 0x1f637 174 | 0x1f60e 175 | 0x1f634 176 | 0x1f632 177 | 0x1f62e 178 | 0x1f608 179 | 0x1f47f 180 | 0x1f62f 181 | 0x1f62c 182 | 0x1f615 183 | 0x1f635 184 | 0x1f636 185 | 0x1f607 186 | 0x1f60f 187 | 0x1f611 188 | 0x1f648 189 | 0x1f649 190 | 0x1f64a 191 | 0x1f47d 192 | 0x1f4a9 193 | 0x2764 194 | 0x1f494 195 | 0x1f525 196 | 0x1f4a2 197 | 0x1f4a4 198 | 0x1f6ab 199 | 0x2b50 200 | 0x26a1 201 | 0x1f319 202 | 0x2600 203 | 0x26c5 204 | 0x2601 205 | 0x2744 206 | 0x2614 207 | 0x26c4 208 | 0x1f44d 209 | 0x1f44e 210 | 0x1f44c 211 | 0x1f44a 212 | 0x270a 213 | 0x270c 214 | 0x270b 215 | 0x1f64f 216 | 0x261d 217 | 0x1f44f 218 | 0x1f91d 219 | 0x1f4aa 220 | 0x1f46a 221 | 0x1f46b 222 | 0x1f47c 223 | 0x1f434 224 | 0x1f436 225 | 0x1f437 226 | 0x1f47b 227 | 0x1f339 228 | 0x1f33b 229 | 0x1f332 230 | 0x1f384 231 | 0x1f381 232 | 0x1f389 233 | 0x1f4b0 234 | 0x1f382 235 | 0x1f356 236 | 0x1f35a 237 | 0x1f366 238 | 0x1f36b 239 | 0x1f349 240 | 0x1f377 241 | 0x1f37b 242 | 0x2615 243 | 0x1f3c0 244 | 0x26bd 245 | 0x1f3c2 246 | 0x1f6b2 247 | 0x1f3a4 248 | 0x1f3b5 249 | 0x1f3b2 250 | 0x1f004 251 | 0x1f451 252 | 0x1f484 253 | 0x1f48b 254 | 0x1f48d 255 | 0x1f4da 256 | 0x1f393 257 | 0x270f 258 | 0x1f3e1 259 | 0x1f6bf 260 | 0x1f4a1 261 | 0x1f4de 262 | 0x1f4e2 263 | 0x1f556 264 | 0x23f0 265 | 0x23f3 266 | 0x1f4a3 267 | 0x1f52b 268 | 0x1f48a 269 | 0x1f680 270 | 0x1f30f 271 | 272 | --------------------------------------------------------------------------------