├── app ├── .gitignore ├── src │ └── main │ │ ├── res │ │ ├── values │ │ │ ├── strings.xml │ │ │ ├── dimens.xml │ │ │ ├── colors.xml │ │ │ └── styles.xml │ │ ├── drawable-xxhdpi │ │ │ ├── e1.png │ │ │ ├── e2.png │ │ │ ├── e3.png │ │ │ ├── e4.png │ │ │ ├── e5.png │ │ │ ├── e6.png │ │ │ ├── e7.png │ │ │ ├── e8.png │ │ │ ├── e9.png │ │ │ ├── e10.png │ │ │ ├── e11.png │ │ │ ├── e12.png │ │ │ ├── e13.png │ │ │ ├── e14.png │ │ │ ├── e15.png │ │ │ ├── e16.png │ │ │ ├── e17.png │ │ │ ├── e18.png │ │ │ ├── e19.png │ │ │ ├── e20.png │ │ │ ├── e21.png │ │ │ ├── e22.png │ │ │ ├── e23.png │ │ │ ├── e24.png │ │ │ ├── e25.png │ │ │ ├── e26.png │ │ │ ├── e27.png │ │ │ ├── e28.png │ │ │ ├── e29.png │ │ │ ├── e30.png │ │ │ ├── e31.png │ │ │ ├── e32.png │ │ │ ├── e33.png │ │ │ ├── e34.png │ │ │ ├── e35.png │ │ │ ├── e36.png │ │ │ ├── e37.png │ │ │ ├── e38.png │ │ │ ├── e39.png │ │ │ ├── e40.png │ │ │ ├── e41.png │ │ │ ├── e42.png │ │ │ ├── e43.png │ │ │ ├── e44.png │ │ │ ├── e45.png │ │ │ ├── e46.png │ │ │ ├── e47.png │ │ │ ├── e48.png │ │ │ ├── e49.png │ │ │ ├── e50.png │ │ │ ├── e51.png │ │ │ ├── e52.png │ │ │ ├── e53.png │ │ │ ├── e54.png │ │ │ ├── e55.png │ │ │ ├── e56.png │ │ │ ├── e57.png │ │ │ ├── e58.png │ │ │ ├── e59.png │ │ │ ├── e60.png │ │ │ ├── e61.png │ │ │ ├── e62.png │ │ │ ├── e63.png │ │ │ ├── gxx1.png │ │ │ ├── gxx2.png │ │ │ ├── gxx3.png │ │ │ ├── gxx4.png │ │ │ ├── gxx5.png │ │ │ ├── gxx6.png │ │ │ ├── ic_launcher.png │ │ │ ├── publish_at_d3x.png │ │ │ ├── delete_expression.png │ │ │ ├── publish_face_n3x.png │ │ │ ├── page_indicator_focused.png │ │ │ └── page_indicator_unfocused.png │ │ ├── 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 │ │ ├── values-w820dp │ │ │ └── dimens.xml │ │ ├── drawable │ │ │ └── shape_round_gray_line.xml │ │ └── layout │ │ │ ├── activity_user_list.xml │ │ │ ├── user_list_item.xml │ │ │ ├── activity_new_emoji.xml │ │ │ ├── activity_input.xml │ │ │ ├── activity_main.xml │ │ │ └── activity_mvvm.xml │ │ ├── java │ │ └── com │ │ │ └── example │ │ │ └── richtext │ │ │ ├── contract │ │ │ └── IMVVMView.java │ │ │ ├── utils │ │ │ ├── JumpUtil.java │ │ │ └── ScreenUtils.java │ │ │ ├── span │ │ │ ├── CustomLinkSpan.java │ │ │ ├── CustomClickTopicSpan.java │ │ │ └── CustomClickAtUserSpan.java │ │ │ ├── UserListActivity.java │ │ │ ├── TopicListActivity.java │ │ │ ├── bind │ │ │ └── RichEditTextBindings.java │ │ │ ├── NewEmojiActivity.java │ │ │ └── MVVMActivity.java │ │ └── AndroidManifest.xml ├── proguard-rules.pro └── build.gradle ├── app-kotlin ├── .gitignore ├── src │ └── main │ │ ├── res │ │ ├── values │ │ │ ├── strings.xml │ │ │ ├── dimens.xml │ │ │ ├── colors.xml │ │ │ └── styles.xml │ │ ├── drawable-xxhdpi │ │ │ ├── e1.png │ │ │ ├── e10.png │ │ │ ├── e11.png │ │ │ ├── e12.png │ │ │ ├── e13.png │ │ │ ├── e14.png │ │ │ ├── e15.png │ │ │ ├── e16.png │ │ │ ├── e17.png │ │ │ ├── e18.png │ │ │ ├── e19.png │ │ │ ├── e2.png │ │ │ ├── e20.png │ │ │ ├── e21.png │ │ │ ├── e22.png │ │ │ ├── e23.png │ │ │ ├── e24.png │ │ │ ├── e25.png │ │ │ ├── e26.png │ │ │ ├── e27.png │ │ │ ├── e28.png │ │ │ ├── e29.png │ │ │ ├── e3.png │ │ │ ├── e30.png │ │ │ ├── e31.png │ │ │ ├── e32.png │ │ │ ├── e33.png │ │ │ ├── e34.png │ │ │ ├── e35.png │ │ │ ├── e36.png │ │ │ ├── e37.png │ │ │ ├── e38.png │ │ │ ├── e39.png │ │ │ ├── e4.png │ │ │ ├── e40.png │ │ │ ├── e41.png │ │ │ ├── e42.png │ │ │ ├── e43.png │ │ │ ├── e44.png │ │ │ ├── e45.png │ │ │ ├── e46.png │ │ │ ├── e47.png │ │ │ ├── e48.png │ │ │ ├── e49.png │ │ │ ├── e5.png │ │ │ ├── e50.png │ │ │ ├── e51.png │ │ │ ├── e52.png │ │ │ ├── e53.png │ │ │ ├── e54.png │ │ │ ├── e55.png │ │ │ ├── e56.png │ │ │ ├── e57.png │ │ │ ├── e58.png │ │ │ ├── e59.png │ │ │ ├── e6.png │ │ │ ├── e60.png │ │ │ ├── e61.png │ │ │ ├── e62.png │ │ │ ├── e63.png │ │ │ ├── e7.png │ │ │ ├── e8.png │ │ │ ├── e9.png │ │ │ ├── gxx1.png │ │ │ ├── gxx2.png │ │ │ ├── gxx3.png │ │ │ ├── gxx4.png │ │ │ ├── gxx5.png │ │ │ ├── gxx6.png │ │ │ ├── ic_launcher.png │ │ │ ├── publish_at_d3x.png │ │ │ ├── delete_expression.png │ │ │ ├── publish_face_n3x.png │ │ │ ├── page_indicator_focused.png │ │ │ └── page_indicator_unfocused.png │ │ ├── mipmap-hdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ ├── mipmap-mdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ ├── mipmap-xhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxxhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ ├── drawable │ │ │ └── shape_round_gray_line.xml │ │ └── layout │ │ │ ├── activity_user_list.xml │ │ │ ├── user_list_item.xml │ │ │ ├── activity_main.xml │ │ │ └── activity_mvvm.xml │ │ ├── java │ │ └── com │ │ │ └── example │ │ │ └── shuyu │ │ │ ├── utils │ │ │ ├── ScreenUtils.kt │ │ │ └── JumpUtil.kt │ │ │ ├── bind │ │ │ ├── RichEditTextBindingsComponent.kt │ │ │ └── RichEditTextBindings.kt │ │ │ ├── contract │ │ │ └── IMVVMView.kt │ │ │ ├── span │ │ │ ├── CustomLinkSpan.kt │ │ │ ├── CustomClickTopicSpan.kt │ │ │ └── CustomClickAtUserSpan.kt │ │ │ ├── TopicListActivity.kt │ │ │ ├── UserListActivity.kt │ │ │ └── MVVMActivity.kt │ │ └── AndroidManifest.xml ├── proguard-rules.pro └── build.gradle ├── textUtilsLib ├── .gitignore ├── src │ └── main │ │ ├── res │ │ ├── values │ │ │ ├── strings.xml │ │ │ └── attrs.xml │ │ ├── drawable-xxhdpi │ │ │ ├── rich_page_indicator_focused.png │ │ │ └── rich_page_indicator_unfocused.png │ │ └── layout │ │ │ ├── rich_smile_image_row_expression.xml │ │ │ ├── rich_expression_gridview.xml │ │ │ └── rich_layout_emoji_container.xml │ │ ├── java │ │ └── com │ │ │ └── shuyu │ │ │ └── textutillib │ │ │ ├── listener │ │ │ ├── OnEditTextUtilJumpListener.java │ │ │ ├── SpanUrlCallBack.java │ │ │ ├── SpanTopicCallBack.java │ │ │ ├── SpanAtUserCallBack.java │ │ │ ├── SpanCreateListener.java │ │ │ └── ITextViewShow.java │ │ │ ├── span │ │ │ ├── ClickTopicSpan.java │ │ │ ├── ClickAtUserSpan.java │ │ │ ├── LinkSpan.java │ │ │ └── CenteredImageSpan.java │ │ │ ├── model │ │ │ ├── TopicModel.java │ │ │ └── UserModel.java │ │ │ ├── LockGridView.java │ │ │ ├── adapter │ │ │ ├── ExpressionPagerAdapter.java │ │ │ └── SmileImageExpressionAdapter.java │ │ │ └── RichEditBuilder.java │ │ └── AndroidManifest.xml ├── proguard-rules.pro └── build.gradle ├── textUtilsLib-kotlin ├── .gitignore ├── src │ └── main │ │ ├── res │ │ ├── values │ │ │ ├── strings.xml │ │ │ └── attrs.xml │ │ ├── drawable-xxhdpi │ │ │ ├── rich_page_indicator_focused.png │ │ │ └── rich_page_indicator_unfocused.png │ │ └── layout │ │ │ ├── rich_smile_image_row_expression.xml │ │ │ ├── rich_expression_gridview.xml │ │ │ └── rich_layout_emoji_container.xml │ │ ├── java │ │ └── com │ │ │ └── shuyu │ │ │ └── textutillib │ │ │ ├── listener │ │ │ ├── OnEditTextUtilJumpListener.kt │ │ │ ├── SpanUrlCallBack.kt │ │ │ ├── SpanTopicCallBack.kt │ │ │ ├── SpanAtUserCallBack.kt │ │ │ ├── SpanCreateListener.kt │ │ │ └── ITextViewShow.kt │ │ │ ├── model │ │ │ ├── TopicModel.kt │ │ │ └── UserModel.kt │ │ │ ├── span │ │ │ ├── ClickTopicSpan.kt │ │ │ ├── ClickAtUserSpan.kt │ │ │ ├── LinkSpan.kt │ │ │ └── CenteredImageSpan.kt │ │ │ ├── LockGridView.kt │ │ │ ├── adapter │ │ │ ├── ExpressionPagerAdapter.kt │ │ │ └── SmileImageExpressionAdapter.kt │ │ │ ├── RichEditBuilder.kt │ │ │ └── RichTextBuilder.kt │ │ └── AndroidManifest.xml ├── proguard-rules.pro └── build.gradle ├── 1.png ├── Logo.png ├── settings.gradle ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── .gitignore ├── .travis.yml ├── HISTORY_README.md ├── LICENSE ├── gradle.properties ├── dependencies.gradle ├── gradlew.bat ├── bintray.gradle ├── gradlew └── README.md /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app-kotlin/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /textUtilsLib/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /textUtilsLib-kotlin/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/1.png -------------------------------------------------------------------------------- /Logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/Logo.png -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app', ':textUtilsLib', ':textUtilsLib-kotlin', ':app-kotlin' 2 | -------------------------------------------------------------------------------- /app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | RichText 3 | 4 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /app-kotlin/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | RichText 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e1.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e2.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e3.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e4.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e5.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e6.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e7.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e8.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e9.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e10.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e11.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e12.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e13.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e14.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e15.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e16.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e17.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e18.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e19.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e20.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e21.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e22.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e23.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e23.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e24.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e25.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e26.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e26.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e27.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e27.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e28.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e29.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e30.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e31.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e31.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e32.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e33.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e33.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e34.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e34.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e35.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e35.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e36.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e37.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e37.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e38.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e38.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e39.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e39.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e40.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e41.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e41.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e42.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e42.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e43.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e43.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e44.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e44.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e45.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e45.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e46.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e46.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e47.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e47.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e48.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e49.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e49.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e50.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e51.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e51.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e52.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e52.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e53.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e53.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e54.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e54.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e55.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e55.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e56.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e56.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e57.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e58.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e59.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e59.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e60.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e61.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e61.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e62.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e62.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/e63.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/e63.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/gxx1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/gxx1.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/gxx2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/gxx2.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/gxx3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/gxx3.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/gxx4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/gxx4.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/gxx5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/gxx5.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/gxx6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/gxx6.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e1.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e10.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e11.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e12.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e13.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e14.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e15.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e16.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e17.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e18.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e19.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e2.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e20.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e21.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e22.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e23.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e23.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e24.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e25.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e26.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e26.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e27.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e27.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e28.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e29.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e3.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e30.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e31.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e31.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e32.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e33.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e33.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e34.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e34.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e35.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e35.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e36.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e37.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e37.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e38.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e38.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e39.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e39.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e4.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e40.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e41.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e41.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e42.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e42.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e43.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e43.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e44.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e44.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e45.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e45.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e46.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e46.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e47.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e47.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e48.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e49.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e49.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e5.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e50.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e51.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e51.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e52.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e52.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e53.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e53.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e54.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e54.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e55.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e55.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e56.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e56.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e57.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e58.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e59.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e59.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e6.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e60.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e61.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e61.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e62.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e62.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e63.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e63.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e7.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e8.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/e9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/e9.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/gxx1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/gxx1.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/gxx2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/gxx2.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/gxx3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/gxx3.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/gxx4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/gxx4.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/gxx5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/gxx5.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/gxx6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/gxx6.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/publish_at_d3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/publish_at_d3x.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/delete_expression.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/delete_expression.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/publish_face_n3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/publish_face_n3x.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/publish_at_d3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/publish_at_d3x.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/page_indicator_focused.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/page_indicator_focused.png -------------------------------------------------------------------------------- /textUtilsLib/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | TextUtilLib 4 | 5 | -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/delete_expression.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/delete_expression.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/publish_face_n3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/publish_face_n3x.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/page_indicator_unfocused.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app/src/main/res/drawable-xxhdpi/page_indicator_unfocused.png -------------------------------------------------------------------------------- /textUtilsLib-kotlin/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | TextUtilLib 4 | 5 | -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/page_indicator_focused.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/page_indicator_focused.png -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable-xxhdpi/page_indicator_unfocused.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/app-kotlin/src/main/res/drawable-xxhdpi/page_indicator_unfocused.png -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/workspace.xml 5 | /.idea/libraries 6 | .DS_Store 7 | /build 8 | /captures 9 | .externalNativeBuild 10 | *.apk 11 | .idea 12 | keyid -------------------------------------------------------------------------------- /textUtilsLib/src/main/res/drawable-xxhdpi/rich_page_indicator_focused.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/textUtilsLib/src/main/res/drawable-xxhdpi/rich_page_indicator_focused.png -------------------------------------------------------------------------------- /textUtilsLib/src/main/res/drawable-xxhdpi/rich_page_indicator_unfocused.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/textUtilsLib/src/main/res/drawable-xxhdpi/rich_page_indicator_unfocused.png -------------------------------------------------------------------------------- /textUtilsLib-kotlin/src/main/res/drawable-xxhdpi/rich_page_indicator_focused.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/textUtilsLib-kotlin/src/main/res/drawable-xxhdpi/rich_page_indicator_focused.png -------------------------------------------------------------------------------- /textUtilsLib-kotlin/src/main/res/drawable-xxhdpi/rich_page_indicator_unfocused.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CarGuo/GSYRickText/HEAD/textUtilsLib-kotlin/src/main/res/drawable-xxhdpi/rich_page_indicator_unfocused.png -------------------------------------------------------------------------------- /app/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16dp 4 | 16dp 5 | 6 | -------------------------------------------------------------------------------- /app-kotlin/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16dp 4 | 16dp 5 | 6 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Wed Jan 03 09:16:02 CST 2018 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-4.1-all.zip 7 | -------------------------------------------------------------------------------- /textUtilsLib-kotlin/src/main/java/com/shuyu/textutillib/listener/OnEditTextUtilJumpListener.kt: -------------------------------------------------------------------------------- 1 | package com.shuyu.textutillib.listener 2 | 3 | /** 4 | * 文本框输入了@的跳转 5 | * Created by shuyu on 2016/11/10. 6 | */ 7 | 8 | open interface OnEditTextUtilJumpListener { 9 | fun notifyAt() 10 | fun notifyTopic() 11 | } 12 | -------------------------------------------------------------------------------- /textUtilsLib/src/main/java/com/shuyu/textutillib/listener/OnEditTextUtilJumpListener.java: -------------------------------------------------------------------------------- 1 | package com.shuyu.textutillib.listener; 2 | 3 | /** 4 | * 文本框输入了@的跳转 5 | * Created by shuyu on 2016/11/10. 6 | */ 7 | 8 | public interface OnEditTextUtilJumpListener { 9 | void notifyAt(); 10 | void notifyTopic(); 11 | } 12 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: android 2 | jdk: oraclejdk8 3 | android: 4 | components: 5 | - platform-tools 6 | - tools 7 | - build-tools-26.0.2 8 | - android-22 9 | - extra-android-support 10 | - extra-android-m2repository 11 | 12 | before_install: 13 | - chmod +x gradlew 14 | 15 | script: 16 | - cd textUtilsLib 17 | - ../gradlew assembleRelease 18 | -------------------------------------------------------------------------------- /textUtilsLib/src/main/java/com/shuyu/textutillib/listener/SpanUrlCallBack.java: -------------------------------------------------------------------------------- 1 | package com.shuyu.textutillib.listener; 2 | 3 | import android.view.View; 4 | 5 | /** 6 | * url被点击的回掉 7 | * Created by shuyu on 2016/11/10. 8 | */ 9 | 10 | public interface SpanUrlCallBack { 11 | void phone(View view, String phone); 12 | 13 | void url(View view, String url); 14 | } 15 | -------------------------------------------------------------------------------- /textUtilsLib-kotlin/src/main/java/com/shuyu/textutillib/listener/SpanUrlCallBack.kt: -------------------------------------------------------------------------------- 1 | package com.shuyu.textutillib.listener 2 | 3 | import android.view.View 4 | 5 | /** 6 | * url被点击的回掉 7 | * Created by shuyu on 2016/11/10. 8 | */ 9 | 10 | open interface SpanUrlCallBack { 11 | fun phone(view: View, phone: String) 12 | 13 | fun url(view: View, url: String) 14 | } 15 | -------------------------------------------------------------------------------- /textUtilsLib-kotlin/src/main/java/com/shuyu/textutillib/listener/SpanTopicCallBack.kt: -------------------------------------------------------------------------------- 1 | package com.shuyu.textutillib.listener 2 | 3 | import android.view.View 4 | 5 | import com.shuyu.textutillib.model.TopicModel 6 | 7 | /** 8 | * 处理话题的回调 9 | * Created by shuyu on 2016/11/10. 10 | */ 11 | 12 | open interface SpanTopicCallBack { 13 | fun onClick(view: View, topicModel: TopicModel) 14 | } 15 | -------------------------------------------------------------------------------- /textUtilsLib/src/main/java/com/shuyu/textutillib/listener/SpanTopicCallBack.java: -------------------------------------------------------------------------------- 1 | package com.shuyu.textutillib.listener; 2 | 3 | import android.view.View; 4 | 5 | import com.shuyu.textutillib.model.TopicModel; 6 | 7 | /** 8 | * 处理话题的回调 9 | * Created by shuyu on 2016/11/10. 10 | */ 11 | 12 | public interface SpanTopicCallBack { 13 | void onClick(View view, TopicModel topicModel); 14 | } 15 | -------------------------------------------------------------------------------- /textUtilsLib/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /textUtilsLib/src/main/java/com/shuyu/textutillib/listener/SpanAtUserCallBack.java: -------------------------------------------------------------------------------- 1 | package com.shuyu.textutillib.listener; 2 | 3 | import android.view.View; 4 | 5 | import com.shuyu.textutillib.model.UserModel; 6 | 7 | /** 8 | * 处理@被某人的回调 9 | * Created by shuyu on 2016/11/10. 10 | */ 11 | 12 | public interface SpanAtUserCallBack { 13 | void onClick(View view, UserModel userModel1); 14 | } 15 | -------------------------------------------------------------------------------- /app/src/main/res/values-w820dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 64dp 6 | 7 | -------------------------------------------------------------------------------- /textUtilsLib-kotlin/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_round_gray_line.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /textUtilsLib-kotlin/src/main/java/com/shuyu/textutillib/listener/SpanAtUserCallBack.kt: -------------------------------------------------------------------------------- 1 | package com.shuyu.textutillib.listener 2 | 3 | import android.view.View 4 | 5 | import com.shuyu.textutillib.model.UserModel 6 | 7 | /** 8 | * 处理@被某人的回调 9 | * Created by shuyu on 2016/11/10. 10 | */ 11 | 12 | open interface SpanAtUserCallBack { 13 | fun onClick(view: View, userModel1: UserModel) 14 | } 15 | -------------------------------------------------------------------------------- /app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #3F51B5 4 | #303F9F 5 | #FF4081 6 | 7 | #FFFFFF 8 | #EFEFEF 9 | #f77500 10 | 11 | -------------------------------------------------------------------------------- /app-kotlin/src/main/java/com/example/shuyu/utils/ScreenUtils.kt: -------------------------------------------------------------------------------- 1 | package com.example.shuyu.utils 2 | 3 | import android.content.Context 4 | 5 | /** 6 | * Created by guoshuyu on 2017/10/19. 7 | */ 8 | object ScreenUtils { 9 | 10 | fun dip2px(context: Context, dipValue: Float): Float { 11 | val fontScale = context.resources.displayMetrics.density 12 | return (dipValue* fontScale+ 0.5f) 13 | } 14 | 15 | } -------------------------------------------------------------------------------- /app-kotlin/src/main/res/drawable/shape_round_gray_line.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /app-kotlin/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #3F51B5 4 | #303F9F 5 | #FF4081 6 | 7 | #FFFFFF 8 | #EFEFEF 9 | #f77500 10 | 11 | -------------------------------------------------------------------------------- /app-kotlin/src/main/java/com/example/shuyu/bind/RichEditTextBindingsComponent.kt: -------------------------------------------------------------------------------- 1 | package com.example.shuyu.bind 2 | 3 | import android.databinding.DataBindingComponent 4 | 5 | /** 6 | * kotlin 需要提供DataBindingComponent来指定BindingAdapter 7 | * Created by guoshuyu on 2017/10/20. 8 | */ 9 | open class RichEditTextBindingsComponent : DataBindingComponent { 10 | 11 | override fun getCompanion(): RichEditTextBindings.Companion = RichEditTextBindings 12 | } -------------------------------------------------------------------------------- /app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /app-kotlin/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_user_list.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app-kotlin/src/main/res/layout/activity_user_list.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/layout/user_list_item.xml: -------------------------------------------------------------------------------- 1 | 2 | 12 | 13 | -------------------------------------------------------------------------------- /app-kotlin/src/main/res/layout/user_list_item.xml: -------------------------------------------------------------------------------- 1 | 2 | 12 | 13 | -------------------------------------------------------------------------------- /textUtilsLib/src/main/res/layout/rich_smile_image_row_expression.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 14 | 15 | -------------------------------------------------------------------------------- /textUtilsLib-kotlin/src/main/res/layout/rich_smile_image_row_expression.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 14 | 15 | -------------------------------------------------------------------------------- /textUtilsLib-kotlin/src/main/java/com/shuyu/textutillib/model/TopicModel.kt: -------------------------------------------------------------------------------- 1 | package com.shuyu.textutillib.model 2 | 3 | import java.io.Serializable 4 | 5 | /** 6 | * 话题model 7 | * Created by guoshuyu on 2017/8/16. 8 | */ 9 | 10 | class TopicModel: Serializable { 11 | /** 12 | * 话题名字内部不能有#和空格 13 | */ 14 | var topicName: String = "" 15 | var topicId: String = "" 16 | 17 | constructor() 18 | 19 | constructor(topicName: String, topicId: String) { 20 | this.topicName = topicName 21 | this.topicId = topicId 22 | } 23 | 24 | override fun toString(): String = this.topicName 25 | } 26 | -------------------------------------------------------------------------------- /app-kotlin/src/main/java/com/example/shuyu/contract/IMVVMView.kt: -------------------------------------------------------------------------------- 1 | package com.example.shuyu.contract 2 | 3 | import android.content.Context 4 | 5 | import com.shuyu.textutillib.listener.SpanAtUserCallBack 6 | import com.shuyu.textutillib.listener.SpanTopicCallBack 7 | import com.shuyu.textutillib.listener.SpanUrlCallBack 8 | 9 | /** 10 | * view 接口 11 | * Created by guoshuyu on 2017/8/22. 12 | */ 13 | 14 | open interface IMVVMView { 15 | val spanTopicCallBack: SpanTopicCallBack 16 | 17 | val spanAtUserCallBack: SpanAtUserCallBack 18 | 19 | val spanUrlCallBack: SpanUrlCallBack 20 | 21 | val context: Context 22 | } 23 | 24 | -------------------------------------------------------------------------------- /textUtilsLib-kotlin/src/main/java/com/shuyu/textutillib/model/UserModel.kt: -------------------------------------------------------------------------------- 1 | package com.shuyu.textutillib.model 2 | 3 | import java.io.Serializable 4 | 5 | /** 6 | * 用户model 7 | * Created by shuyu on 2016/11/10. 8 | */ 9 | 10 | class UserModel : Serializable { 11 | 12 | /** 13 | * 名字不能带@和空格 14 | */ 15 | var user_name: String = "" 16 | 17 | var user_id: String = "" 18 | 19 | constructor() 20 | 21 | constructor(user_name: String, user_id: String) { 22 | this.user_name = user_name 23 | this.user_id = user_id 24 | } 25 | 26 | override fun toString(): String = this.user_name 27 | } 28 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/richtext/contract/IMVVMView.java: -------------------------------------------------------------------------------- 1 | package com.example.richtext.contract; 2 | 3 | import android.content.Context; 4 | import android.text.method.MovementMethod; 5 | 6 | import com.shuyu.textutillib.listener.SpanAtUserCallBack; 7 | import com.shuyu.textutillib.listener.SpanTopicCallBack; 8 | import com.shuyu.textutillib.listener.SpanUrlCallBack; 9 | 10 | /** 11 | * view 接口 12 | * Created by guoshuyu on 2017/8/22. 13 | */ 14 | 15 | public interface IMVVMView { 16 | SpanTopicCallBack getSpanTopicCallBack(); 17 | 18 | SpanAtUserCallBack getSpanAtUserCallBack(); 19 | 20 | SpanUrlCallBack getSpanUrlCallBack(); 21 | 22 | Context getContext(); 23 | } 24 | -------------------------------------------------------------------------------- /app-kotlin/src/main/java/com/example/shuyu/span/CustomLinkSpan.kt: -------------------------------------------------------------------------------- 1 | package com.example.shuyu.span 2 | 3 | 4 | import android.content.Context 5 | import android.graphics.Typeface 6 | import android.text.TextPaint 7 | 8 | import com.shuyu.textutillib.listener.SpanUrlCallBack 9 | import com.shuyu.textutillib.span.LinkSpan 10 | 11 | /** 12 | * 自定义显示可点击的手机号码和URL 13 | * Created by shuyu on 2016/11/10. 14 | */ 15 | open class CustomLinkSpan(context: Context, url: String, color: Int, spanUrlCallBack: SpanUrlCallBack) : LinkSpan(context, url, color, spanUrlCallBack) { 16 | 17 | override fun updateDrawState(ds: TextPaint) { 18 | super.updateDrawState(ds) 19 | ds.isUnderlineText = true 20 | ds.typeface = Typeface.DEFAULT_BOLD 21 | } 22 | } -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in C:\workSpace\softWare\Android\adt-bundle-windows-x86_64-20140702\sdk/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | -------------------------------------------------------------------------------- /textUtilsLib/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in C:\workSpace\softWare\Android\adt-bundle-windows-x86_64-20140702\sdk/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | -------------------------------------------------------------------------------- /textUtilsLib-kotlin/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in C:\workSpace\softWare\Android\adt-bundle-windows-x86_64-20140702\sdk/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | -------------------------------------------------------------------------------- /app-kotlin/src/main/java/com/example/shuyu/utils/JumpUtil.kt: -------------------------------------------------------------------------------- 1 | package com.example.shuyu.utils 2 | 3 | import android.app.Activity 4 | import android.content.Intent 5 | 6 | import com.example.shuyu.TopicListActivity 7 | import com.example.shuyu.UserListActivity 8 | 9 | open class JumpUtil { 10 | 11 | companion object { 12 | fun goToUserList(activity: Activity, code: Int) { 13 | val intent = Intent(activity, UserListActivity::class.java) 14 | activity.startActivityForResult(intent, code) 15 | } 16 | 17 | 18 | fun goToTopicList(activity: Activity, code: Int) { 19 | val intent = Intent(activity, TopicListActivity::class.java) 20 | activity.startActivityForResult(intent, code) 21 | } 22 | } 23 | 24 | } -------------------------------------------------------------------------------- /textUtilsLib-kotlin/src/main/java/com/shuyu/textutillib/span/ClickTopicSpan.kt: -------------------------------------------------------------------------------- 1 | package com.shuyu.textutillib.span 2 | 3 | import android.content.Context 4 | import android.view.View 5 | 6 | import com.shuyu.textutillib.listener.SpanTopicCallBack 7 | import com.shuyu.textutillib.model.TopicModel 8 | import com.shuyu.textutillib.model.UserModel 9 | 10 | /** 11 | * 话题#点击回调 12 | * Created by guoshuyu on 2017/8/16. 13 | */ 14 | 15 | open class ClickTopicSpan(context: Context, private val topicModel: TopicModel, color: Int, private val spanTopicCallBack: SpanTopicCallBack?) : ClickAtUserSpan(context, UserModel(), color, null) { 16 | 17 | override fun onClick(view: View) { 18 | super.onClick(view) 19 | spanTopicCallBack?.onClick(view, topicModel) 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/richtext/utils/JumpUtil.java: -------------------------------------------------------------------------------- 1 | package com.example.richtext.utils; 2 | 3 | import android.app.Activity; 4 | import android.content.Intent; 5 | 6 | import com.example.richtext.TopicListActivity; 7 | import com.example.richtext.UserListActivity; 8 | 9 | /** 10 | * Created by shuyu on 2016/11/10. 11 | */ 12 | 13 | public class JumpUtil { 14 | 15 | public static void goToUserList(Activity activity, int code) { 16 | Intent intent = new Intent(activity, UserListActivity.class); 17 | activity.startActivityForResult(intent, code); 18 | } 19 | 20 | 21 | public static void goToTopicList(Activity activity, int code) { 22 | Intent intent = new Intent(activity, TopicListActivity.class); 23 | activity.startActivityForResult(intent, code); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /textUtilsLib/src/main/res/layout/rich_expression_gridview.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /textUtilsLib-kotlin/src/main/res/layout/rich_expression_gridview.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /textUtilsLib/src/main/java/com/shuyu/textutillib/listener/SpanCreateListener.java: -------------------------------------------------------------------------------- 1 | package com.shuyu.textutillib.listener; 2 | 3 | import android.content.Context; 4 | 5 | import com.shuyu.textutillib.model.TopicModel; 6 | import com.shuyu.textutillib.model.UserModel; 7 | import com.shuyu.textutillib.span.ClickAtUserSpan; 8 | import com.shuyu.textutillib.span.ClickTopicSpan; 9 | import com.shuyu.textutillib.span.LinkSpan; 10 | 11 | /** 12 | * Created by guoshuyu on 2017/8/31. 13 | */ 14 | 15 | public interface SpanCreateListener { 16 | 17 | ClickAtUserSpan getCustomClickAtUserSpan(Context context, UserModel userModel, int color, SpanAtUserCallBack spanClickCallBack); 18 | 19 | ClickTopicSpan getCustomClickTopicSpan(Context context, TopicModel topicModel, int color, SpanTopicCallBack spanTopicCallBack); 20 | 21 | LinkSpan getCustomLinkSpan(Context context, String url, int color, SpanUrlCallBack spanUrlCallBack); 22 | } 23 | -------------------------------------------------------------------------------- /textUtilsLib-kotlin/src/main/java/com/shuyu/textutillib/span/ClickAtUserSpan.kt: -------------------------------------------------------------------------------- 1 | package com.shuyu.textutillib.span 2 | 3 | import android.content.Context 4 | import android.text.TextPaint 5 | import android.text.style.ClickableSpan 6 | import android.view.View 7 | 8 | import com.shuyu.textutillib.listener.SpanAtUserCallBack 9 | import com.shuyu.textutillib.model.UserModel 10 | 11 | /** 12 | * 显示可点击的@某人 13 | * Created by shuyu on 2016/11/10. 14 | */ 15 | open class ClickAtUserSpan(val context: Context, val userModel: UserModel, val color: Int, val spanClickCallBack: SpanAtUserCallBack?) : ClickableSpan() { 16 | 17 | override fun onClick(view: View) { 18 | spanClickCallBack?.onClick(view, userModel) 19 | } 20 | 21 | override fun updateDrawState(ds: TextPaint) { 22 | /** 给文字染色 */ 23 | ds.color = color 24 | /** 去掉下划线 , 默认自带下划线 */ 25 | ds.isUnderlineText = false 26 | } 27 | 28 | } -------------------------------------------------------------------------------- /HISTORY_README.md: -------------------------------------------------------------------------------- 1 | 2 | ---------------------------------- 3 | 4 | ## 版本更新 5 | 6 | #### v2.1.3 (2017-11-22) 7 | * 修复某些情况下删除按键导致的问题 8 | 9 | #### v2.1.2 (2017-10-20) 10 | * 优化一些问题 11 | * 增加kotlin lib 与 kotlin demo 12 | 13 | 14 | #### v2.1.1 (2017-09-19) 15 | * 增加表情居中功能的支持。 16 | 17 | #### v2.1.0 (2017-09-17) 18 | * 修复了@和#输入存在的问题。 19 | 20 | #### v2.0.9 (2017-09-12) 21 | * 表情大小兼容设置 22 | 23 | #### v2.0.8 (2017-09-11) 24 | * 修复了表情键盘删除时的问题 25 | 26 | #### v2.0.7 (2017-09-10) 27 | * 表情大小调节支持 28 | 29 | #### v2.0.6 (2017-09-06) 30 | * 优化了内部处理 31 | * 增加KeyBoardLockLayout 32 | * EmojiLayout增加配置行列数支持 33 | ``` 34 | app:richLayoutNumColumns="5" 35 | app:richLayoutNumRows="3" 36 | ``` 37 | 38 | #### v2.0.5 (2017-09-02) 39 | * 修复了一些问题。 40 | 41 | #### v2.0.4 (2017-08-31) 42 | * 增加了可自定义span样式的接口。 43 | 44 | #### v2.0.3 (2017-08-28) 45 | 46 | * 新增加了RichTextView 47 | * 优化了接口 48 | * MVVM支持 49 | 50 | #### v2.0.2 51 | * 优化了文本显示逻辑。 52 | 53 | ## License 54 | 55 | ``` 56 | MIT 57 | ``` 58 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/richtext/span/CustomLinkSpan.java: -------------------------------------------------------------------------------- 1 | package com.example.richtext.span; 2 | 3 | 4 | import android.content.Context; 5 | import android.graphics.Typeface; 6 | import android.text.TextPaint; 7 | import android.text.TextUtils; 8 | import android.text.style.ClickableSpan; 9 | import android.view.View; 10 | 11 | import com.shuyu.textutillib.listener.SpanUrlCallBack; 12 | import com.shuyu.textutillib.span.LinkSpan; 13 | 14 | /** 15 | * 自定义显示可点击的手机号码和URL 16 | * Created by shuyu on 2016/11/10. 17 | */ 18 | public class CustomLinkSpan extends LinkSpan { 19 | 20 | public CustomLinkSpan(Context context, String url, int color, SpanUrlCallBack spanUrlCallBack) { 21 | super(context, url, color, spanUrlCallBack); 22 | } 23 | 24 | @Override 25 | public void updateDrawState(TextPaint ds) { 26 | super.updateDrawState(ds); 27 | ds.setUnderlineText(true); 28 | ds.setTypeface(Typeface.DEFAULT_BOLD); 29 | } 30 | } -------------------------------------------------------------------------------- /textUtilsLib-kotlin/src/main/java/com/shuyu/textutillib/listener/SpanCreateListener.kt: -------------------------------------------------------------------------------- 1 | package com.shuyu.textutillib.listener 2 | 3 | import android.content.Context 4 | 5 | import com.shuyu.textutillib.model.TopicModel 6 | import com.shuyu.textutillib.model.UserModel 7 | import com.shuyu.textutillib.span.ClickAtUserSpan 8 | import com.shuyu.textutillib.span.ClickTopicSpan 9 | import com.shuyu.textutillib.span.LinkSpan 10 | 11 | /** 12 | * Created by guoshuyu on 2017/8/31. 13 | */ 14 | 15 | open interface SpanCreateListener { 16 | 17 | fun getCustomClickAtUserSpan(context: Context, userModel: UserModel, color: Int, spanClickCallBack: SpanAtUserCallBack): ClickAtUserSpan 18 | 19 | fun getCustomClickTopicSpan(context: Context, topicModel: TopicModel, color: Int, spanTopicCallBack: SpanTopicCallBack): ClickTopicSpan 20 | 21 | fun getCustomLinkSpan(context: Context, url: String, color: Int, spanUrlCallBack: SpanUrlCallBack): LinkSpan 22 | } 23 | -------------------------------------------------------------------------------- /textUtilsLib/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.library' 2 | 3 | android { 4 | 5 | def globalConfiguration = rootProject.extensions.getByName("ext") 6 | compileSdkVersion globalConfiguration.androidCompileSdkVersion 7 | buildToolsVersion globalConfiguration.androidBuildToolsVersion 8 | 9 | defaultConfig { 10 | 11 | minSdkVersion globalConfiguration.androidMinSdkVersion 12 | targetSdkVersion globalConfiguration.androidTargetSdkVersion 13 | 14 | versionCode 1 15 | versionName "1.0" 16 | 17 | } 18 | buildTypes { 19 | release { 20 | minifyEnabled false 21 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 22 | } 23 | } 24 | } 25 | 26 | dependencies { 27 | compile fileTree(dir: 'libs', include: ['*.jar']) 28 | compile androidDependencies.support_v4 29 | compile androidDependencies.appcompat_v7 30 | } 31 | 32 | //apply from: '../bintray.gradle' -------------------------------------------------------------------------------- /app-kotlin/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in C:\android-sdk/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | 19 | # Uncomment this to preserve the line number information for 20 | # debugging stack traces. 21 | #-keepattributes SourceFile,LineNumberTable 22 | 23 | # If you keep the line number information, uncomment this to 24 | # hide the original source file name. 25 | #-renamesourcefileattribute SourceFile 26 | -------------------------------------------------------------------------------- /textUtilsLib/src/main/java/com/shuyu/textutillib/span/ClickTopicSpan.java: -------------------------------------------------------------------------------- 1 | package com.shuyu.textutillib.span; 2 | 3 | import android.content.Context; 4 | import android.view.View; 5 | 6 | import com.shuyu.textutillib.listener.SpanTopicCallBack; 7 | import com.shuyu.textutillib.model.TopicModel; 8 | 9 | /** 10 | * 话题#点击回调 11 | * Created by guoshuyu on 2017/8/16. 12 | */ 13 | 14 | public class ClickTopicSpan extends ClickAtUserSpan { 15 | 16 | 17 | private TopicModel topicModel; 18 | private SpanTopicCallBack spanTopicCallBack; 19 | 20 | public ClickTopicSpan(Context context, TopicModel topicModel, int color, SpanTopicCallBack spanTopicCallBack) { 21 | super(context, null, color, null); 22 | this.topicModel = topicModel; 23 | this.spanTopicCallBack = spanTopicCallBack; 24 | } 25 | 26 | @Override 27 | public void onClick(View view) { 28 | super.onClick(view); 29 | if (spanTopicCallBack != null) { 30 | spanTopicCallBack.onClick(view, topicModel); 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /textUtilsLib/src/main/java/com/shuyu/textutillib/model/TopicModel.java: -------------------------------------------------------------------------------- 1 | package com.shuyu.textutillib.model; 2 | 3 | import java.io.Serializable; 4 | 5 | /** 6 | * 话题model 7 | * Created by guoshuyu on 2017/8/16. 8 | */ 9 | 10 | public class TopicModel implements Serializable { 11 | /** 12 | * 话题名字内部不能有#和空格 13 | */ 14 | private String topicName; 15 | private String topicId; 16 | 17 | public TopicModel() { 18 | 19 | } 20 | 21 | public TopicModel(String topicName, String topicId) { 22 | this.topicName = topicName; 23 | this.topicId = topicId; 24 | } 25 | 26 | public String getTopicName() { 27 | return topicName; 28 | } 29 | 30 | public void setTopicName(String topicName) { 31 | this.topicName = topicName; 32 | } 33 | 34 | public String getTopicId() { 35 | return topicId; 36 | } 37 | 38 | public void setTopicId(String topicId) { 39 | this.topicId = topicId; 40 | } 41 | 42 | @Override 43 | public String toString() { 44 | return this.topicName; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /textUtilsLib/src/main/java/com/shuyu/textutillib/model/UserModel.java: -------------------------------------------------------------------------------- 1 | package com.shuyu.textutillib.model; 2 | 3 | import java.io.Serializable; 4 | 5 | /** 6 | * 用户model 7 | * Created by shuyu on 2016/11/10. 8 | */ 9 | 10 | public class UserModel implements Serializable { 11 | 12 | public UserModel() { 13 | 14 | } 15 | 16 | public UserModel(String user_name, String user_id) { 17 | this.user_name = user_name; 18 | this.user_id = user_id; 19 | } 20 | 21 | /** 22 | * 名字不能带@和空格 23 | */ 24 | private String user_name; 25 | 26 | private String user_id; 27 | 28 | public String getUser_name() { 29 | return user_name; 30 | } 31 | 32 | public void setUser_name(String user_name) { 33 | this.user_name = user_name; 34 | } 35 | 36 | public String getUser_id() { 37 | return user_id; 38 | } 39 | 40 | public void setUser_id(String user_id) { 41 | this.user_id = user_id; 42 | } 43 | 44 | @Override 45 | public String toString() { 46 | return this.user_name; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /app-kotlin/src/main/java/com/example/shuyu/span/CustomClickTopicSpan.kt: -------------------------------------------------------------------------------- 1 | package com.example.shuyu.span 2 | 3 | import android.content.Context 4 | import android.graphics.DashPathEffect 5 | import android.graphics.Paint 6 | import android.graphics.PathEffect 7 | import android.text.TextPaint 8 | 9 | import com.shuyu.textutillib.listener.SpanTopicCallBack 10 | import com.shuyu.textutillib.model.TopicModel 11 | import com.shuyu.textutillib.span.ClickTopicSpan 12 | 13 | /** 14 | * 自定义话题#点击回调 15 | * Created by guoshuyu on 2017/8/16. 16 | */ 17 | 18 | open class CustomClickTopicSpan(context: Context, topicModel: TopicModel, color: Int, spanTopicCallBack: SpanTopicCallBack) : ClickTopicSpan(context, topicModel, color, spanTopicCallBack) { 19 | 20 | override fun updateDrawState(ds: TextPaint) { 21 | super.updateDrawState(ds) 22 | ds.isUnderlineText = true 23 | ds.style = Paint.Style.FILL_AND_STROKE 24 | val effects = DashPathEffect(floatArrayOf(1f, 1f), 1f) 25 | ds.pathEffect = effects 26 | ds.strokeWidth = 2f 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /app-kotlin/src/main/java/com/example/shuyu/span/CustomClickAtUserSpan.kt: -------------------------------------------------------------------------------- 1 | package com.example.shuyu.span 2 | 3 | import android.content.Context 4 | import android.graphics.DashPathEffect 5 | import android.graphics.Paint 6 | import android.graphics.PathEffect 7 | import android.text.TextPaint 8 | 9 | import com.shuyu.textutillib.listener.SpanAtUserCallBack 10 | import com.shuyu.textutillib.model.UserModel 11 | import com.shuyu.textutillib.span.ClickAtUserSpan 12 | 13 | /** 14 | * 自定义显示可点击的@某人 15 | * Created by shuyu on 2016/11/10. 16 | */ 17 | open class CustomClickAtUserSpan(context: Context, userModel: UserModel, color: Int, spanClickCallBack: SpanAtUserCallBack) : ClickAtUserSpan(context, userModel, color, spanClickCallBack) { 18 | 19 | override fun updateDrawState(ds: TextPaint) { 20 | super.updateDrawState(ds) 21 | ds.isUnderlineText = true 22 | //间隔线 23 | ds.style = Paint.Style.STROKE 24 | val effects = DashPathEffect(floatArrayOf(1f, 1f), 1f) 25 | ds.pathEffect = effects 26 | ds.strokeWidth = 5f 27 | } 28 | 29 | } -------------------------------------------------------------------------------- /textUtilsLib-kotlin/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.library' 2 | apply plugin: 'kotlin-android' 3 | apply plugin: 'kotlin-android-extensions' 4 | 5 | android { 6 | 7 | def globalConfiguration = rootProject.extensions.getByName("ext") 8 | compileSdkVersion globalConfiguration.androidCompileSdkVersion 9 | buildToolsVersion globalConfiguration.androidBuildToolsVersion 10 | 11 | defaultConfig { 12 | 13 | minSdkVersion globalConfiguration.androidMinSdkVersion 14 | targetSdkVersion globalConfiguration.androidTargetSdkVersion 15 | 16 | versionCode 1 17 | versionName "1.0" 18 | 19 | } 20 | buildTypes { 21 | release { 22 | minifyEnabled false 23 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 24 | } 25 | } 26 | } 27 | 28 | dependencies { 29 | compile fileTree(dir: 'libs', include: ['*.jar']) 30 | compile androidDependencies.support_v4 31 | compile androidDependencies.appcompat_v7 32 | compile androidDependencies.kotlin 33 | } 34 | 35 | //apply from: '../bintray.gradle' -------------------------------------------------------------------------------- /textUtilsLib-kotlin/src/main/java/com/shuyu/textutillib/span/LinkSpan.kt: -------------------------------------------------------------------------------- 1 | package com.shuyu.textutillib.span 2 | 3 | 4 | import android.content.Context 5 | import android.text.TextPaint 6 | import android.text.TextUtils 7 | import android.text.style.ClickableSpan 8 | import android.view.View 9 | 10 | import com.shuyu.textutillib.listener.SpanUrlCallBack 11 | 12 | /** 13 | * 显示可点击的手机号码和URL 14 | * Created by shuyu on 2016/11/10. 15 | */ 16 | open class LinkSpan(private val context: Context, private val url: String, private val color: Int, private val spanUrlCallBack: SpanUrlCallBack?) : ClickableSpan() { 17 | 18 | override fun onClick(widget: View) { 19 | if (url.contains("tel:") && TextUtils.isDigitsOnly(url.replace("tel:", "")) || TextUtils.isDigitsOnly(url)) { 20 | spanUrlCallBack?.phone(widget, url) 21 | } else { 22 | spanUrlCallBack?.url(widget, url) 23 | } 24 | } 25 | 26 | 27 | override fun updateDrawState(ds: TextPaint) { 28 | ds.color = color 29 | /** 去掉下划线 , 默认自带下划线 */ 30 | ds.isUnderlineText = false 31 | } 32 | } -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2017 Shuyu Guo 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /app-kotlin/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 10 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 22 | 25 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | android { 4 | 5 | def globalConfiguration = rootProject.extensions.getByName("ext") 6 | compileSdkVersion globalConfiguration.androidCompileSdkVersion 7 | buildToolsVersion globalConfiguration.androidBuildToolsVersion 8 | 9 | defaultConfig { 10 | applicationId "com.example.richtext" 11 | 12 | minSdkVersion globalConfiguration.androidMinSdkVersion 13 | targetSdkVersion globalConfiguration.androidTargetSdkVersion 14 | 15 | versionCode 1 16 | versionName "1.0" 17 | } 18 | buildTypes { 19 | release { 20 | minifyEnabled false 21 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 22 | } 23 | } 24 | 25 | dataBinding { 26 | enabled = true 27 | } 28 | } 29 | 30 | dependencies { 31 | compile fileTree(dir: 'libs', include: ['*.jar']) 32 | def viewDependencies = rootProject.ext.viewDependencies 33 | annotationProcessor viewDependencies.apt_butterKnife 34 | compile viewDependencies.butterKnife 35 | compile project(':textUtilsLib') 36 | //compile 'com.github.CarGuo.RickText:textUtilsLib:v2.1.2' 37 | } 38 | -------------------------------------------------------------------------------- /textUtilsLib/src/main/res/layout/rich_layout_emoji_container.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 15 | 16 | 21 | 22 | 28 | 29 | -------------------------------------------------------------------------------- /textUtilsLib-kotlin/src/main/res/layout/rich_layout_emoji_container.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 15 | 16 | 21 | 22 | 28 | 29 | -------------------------------------------------------------------------------- /textUtilsLib/src/main/java/com/shuyu/textutillib/listener/ITextViewShow.java: -------------------------------------------------------------------------------- 1 | package com.shuyu.textutillib.listener; 2 | 3 | import android.content.Context; 4 | import android.text.method.MovementMethod; 5 | 6 | import com.shuyu.textutillib.model.TopicModel; 7 | import com.shuyu.textutillib.model.UserModel; 8 | import com.shuyu.textutillib.span.ClickAtUserSpan; 9 | import com.shuyu.textutillib.span.ClickTopicSpan; 10 | import com.shuyu.textutillib.span.LinkSpan; 11 | 12 | /** 13 | * textview 显示接口 14 | * Created by guoshuyu on 2017/8/22. 15 | */ 16 | 17 | public interface ITextViewShow { 18 | void setText(CharSequence charSequence); 19 | 20 | CharSequence getText(); 21 | 22 | void setMovementMethod(MovementMethod movementMethod); 23 | 24 | void setAutoLinkMask(int flag); 25 | 26 | ClickAtUserSpan getCustomClickAtUserSpan(Context context, UserModel userModel, int color, SpanAtUserCallBack spanClickCallBack); 27 | 28 | ClickTopicSpan getCustomClickTopicSpan(Context context, TopicModel topicModel, int color, SpanTopicCallBack spanTopicCallBack); 29 | 30 | LinkSpan getCustomLinkSpan(Context context, String url, int color, SpanUrlCallBack spanUrlCallBack); 31 | 32 | int emojiSize(); 33 | 34 | int verticalAlignment(); 35 | } 36 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/richtext/span/CustomClickTopicSpan.java: -------------------------------------------------------------------------------- 1 | package com.example.richtext.span; 2 | 3 | import android.content.Context; 4 | import android.graphics.DashPathEffect; 5 | import android.graphics.Paint; 6 | import android.graphics.PathEffect; 7 | import android.graphics.Typeface; 8 | import android.text.TextPaint; 9 | import android.view.View; 10 | 11 | import com.shuyu.textutillib.listener.SpanTopicCallBack; 12 | import com.shuyu.textutillib.model.TopicModel; 13 | import com.shuyu.textutillib.span.ClickTopicSpan; 14 | 15 | /** 16 | * 自定义话题#点击回调 17 | * Created by guoshuyu on 2017/8/16. 18 | */ 19 | 20 | public class CustomClickTopicSpan extends ClickTopicSpan { 21 | 22 | public CustomClickTopicSpan(Context context, TopicModel topicModel, int color, SpanTopicCallBack spanTopicCallBack) { 23 | super(context, topicModel, color, spanTopicCallBack); 24 | } 25 | 26 | @Override 27 | public void updateDrawState(TextPaint ds) { 28 | super.updateDrawState(ds); 29 | ds.setUnderlineText(true); 30 | ds.setStyle(Paint.Style.FILL_AND_STROKE); 31 | PathEffect effects = new DashPathEffect(new float[]{1, 1}, 1); 32 | ds.setPathEffect(effects); 33 | ds.setStrokeWidth(2); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /textUtilsLib-kotlin/src/main/java/com/shuyu/textutillib/listener/ITextViewShow.kt: -------------------------------------------------------------------------------- 1 | package com.shuyu.textutillib.listener 2 | 3 | import android.content.Context 4 | import android.text.method.MovementMethod 5 | 6 | import com.shuyu.textutillib.model.TopicModel 7 | import com.shuyu.textutillib.model.UserModel 8 | import com.shuyu.textutillib.span.ClickAtUserSpan 9 | import com.shuyu.textutillib.span.ClickTopicSpan 10 | import com.shuyu.textutillib.span.LinkSpan 11 | 12 | /** 13 | * textview 显示接口 14 | * Created by guoshuyu on 2017/8/22. 15 | */ 16 | 17 | open interface ITextViewShow { 18 | 19 | var text: CharSequence 20 | 21 | fun setMovementMethod(movementMethod: MovementMethod) 22 | 23 | fun setAutoLinkMask(flag: Int) 24 | 25 | fun getCustomClickAtUserSpan(context: Context, userModel: UserModel, color: Int, spanClickCallBack: SpanAtUserCallBack): ClickAtUserSpan? 26 | 27 | fun getCustomClickTopicSpan(context: Context, topicModel: TopicModel, color: Int, spanTopicCallBack: SpanTopicCallBack): ClickTopicSpan? 28 | 29 | fun getCustomLinkSpan(context: Context, url: String, color: Int, spanUrlCallBack: SpanUrlCallBack): LinkSpan? 30 | 31 | fun emojiSize(): Int 32 | 33 | fun verticalAlignment(): Int 34 | } 35 | -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | 3 | # IDE (e.g. Android Studio) users: 4 | # Gradle settings configured through the IDE *will override* 5 | # any settings specified in this file. 6 | 7 | # For more details on how to configure your build environment visit 8 | # http://www.gradle.org/docs/current/userguide/build_environment.html 9 | 10 | # Specifies the JVM arguments used for the daemon process. 11 | # The setting is particularly useful for tweaking memory settings. 12 | org.gradle.jvmargs=-Xmx1536m 13 | 14 | # When configured, Gradle will run in incubating parallel mode. 15 | # This option should only be used with decoupled projects. More details, visit 16 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 17 | # org.gradle.parallel=true 18 | 19 | BINTRAY_USER= 20 | BINTRAY_KEY= 21 | PROJ_GROUP=com.shuyu 22 | PROJ_VERSION=1.0.3 23 | PROJ_NAME=TextUtilsLib 24 | PROJ_WEBSITEURL=https://github.com/CarGuo/RickText 25 | PROJ_ISSUETRACKERURL= 26 | PROJ_VCSURL=git@github.com:CarGuo/RickText.git 27 | PROJ_DESCRIPTION=text utils for editext and textview 28 | PROJ_ARTIFACTID=textutillib 29 | PROJ_USER_ORG=guoshuyu 30 | PROJ_USER_MAVEN=shuyu 31 | 32 | 33 | DEVELOPER_ID=guo 34 | DEVELOPER_NAME=guoshuyu 35 | DEVELOPER_EMAIL=359369982@qq.com -------------------------------------------------------------------------------- /app/src/main/java/com/example/richtext/span/CustomClickAtUserSpan.java: -------------------------------------------------------------------------------- 1 | package com.example.richtext.span; 2 | 3 | import android.content.Context; 4 | import android.graphics.DashPathEffect; 5 | import android.graphics.Paint; 6 | import android.graphics.PathEffect; 7 | import android.graphics.Typeface; 8 | import android.text.TextPaint; 9 | import android.text.style.ClickableSpan; 10 | import android.view.View; 11 | 12 | import com.shuyu.textutillib.listener.SpanAtUserCallBack; 13 | import com.shuyu.textutillib.model.UserModel; 14 | import com.shuyu.textutillib.span.ClickAtUserSpan; 15 | 16 | /** 17 | * 自定义显示可点击的@某人 18 | * Created by shuyu on 2016/11/10. 19 | */ 20 | public class CustomClickAtUserSpan extends ClickAtUserSpan { 21 | 22 | public CustomClickAtUserSpan(Context context, UserModel userModel, int color, SpanAtUserCallBack spanClickCallBack) { 23 | super(context, userModel, color, spanClickCallBack); 24 | } 25 | 26 | @Override 27 | public void updateDrawState(TextPaint ds) { 28 | super.updateDrawState(ds); 29 | ds.setUnderlineText(true); 30 | //间隔线 31 | ds.setStyle(Paint.Style.STROKE); 32 | PathEffect effects = new DashPathEffect(new float[]{1, 1}, 1); 33 | ds.setPathEffect(effects); 34 | ds.setStrokeWidth(5); 35 | } 36 | 37 | } -------------------------------------------------------------------------------- /dependencies.gradle: -------------------------------------------------------------------------------- 1 | allprojects { 2 | repositories { 3 | jcenter() 4 | } 5 | } 6 | 7 | ext { 8 | //Android 9 | androidBuildToolsVersion = "26.0.2" 10 | androidMinSdkVersion = 16 11 | androidTargetSdkVersion = 22 12 | androidCompileSdkVersion = 22 13 | supportLibraryVersion = '24.2.0' 14 | otherLibraryVersion = '22.2.1' 15 | 16 | kotlin_version = '1.1.2-4' 17 | gradle_version = '3.0.1' 18 | 19 | //ViewLibraries 20 | butterKnifeVersion = '8.2.1' 21 | 22 | androidDependencies = [ 23 | recyclerView: "com.android.support:recyclerview-v7:${supportLibraryVersion}", 24 | appcompat_v7: "com.android.support:appcompat-v7:${otherLibraryVersion}", 25 | cardview_v7 : "com.android.support:cardview-v7:23.2.0", 26 | support_v4 : "com.android.support:support-v4:${supportLibraryVersion}", 27 | design : "com.android.support:design:${otherLibraryVersion}", 28 | kotlin : "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version", 29 | kaptKotlin : "com.android.databinding:compiler:$gradle_version" 30 | ] 31 | 32 | viewDependencies = [ 33 | butterKnife : "com.jakewharton:butterknife:${butterKnifeVersion}", 34 | apt_butterKnife: "com.jakewharton:butterknife-compiler:${butterKnifeVersion}", 35 | ] 36 | } 37 | -------------------------------------------------------------------------------- /app-kotlin/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | apply plugin: 'kotlin-android' 3 | apply plugin: 'kotlin-android-extensions' 4 | 5 | android { 6 | 7 | def globalConfiguration = rootProject.extensions.getByName("ext") 8 | compileSdkVersion globalConfiguration.androidCompileSdkVersion 9 | buildToolsVersion globalConfiguration.androidBuildToolsVersion 10 | 11 | defaultConfig { 12 | applicationId "com.example.shuyu" 13 | 14 | minSdkVersion globalConfiguration.androidMinSdkVersion 15 | targetSdkVersion globalConfiguration.androidTargetSdkVersion 16 | 17 | versionCode 1 18 | versionName "1.0" 19 | } 20 | buildTypes { 21 | release { 22 | minifyEnabled false 23 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 24 | } 25 | } 26 | 27 | dataBinding { 28 | enabled = true 29 | } 30 | 31 | kapt { 32 | generateStubs = true 33 | } 34 | } 35 | 36 | dependencies { 37 | compile fileTree(dir: 'libs', include: ['*.jar']) 38 | def androidDependencies = rootProject.ext.androidDependencies 39 | compile androidDependencies.kotlin 40 | kapt androidDependencies.kaptKotlin 41 | compile project(':textUtilsLib-kotlin') 42 | //compile 'com.github.CarGuo.RickText:textUtilsLib-kotlin:v2.1.2' 43 | } 44 | -------------------------------------------------------------------------------- /textUtilsLib/src/main/java/com/shuyu/textutillib/span/ClickAtUserSpan.java: -------------------------------------------------------------------------------- 1 | package com.shuyu.textutillib.span; 2 | 3 | import android.content.Context; 4 | import android.text.TextPaint; 5 | import android.text.style.ClickableSpan; 6 | import android.view.View; 7 | 8 | import com.shuyu.textutillib.listener.SpanAtUserCallBack; 9 | import com.shuyu.textutillib.model.UserModel; 10 | 11 | /** 12 | * 显示可点击的@某人 13 | * Created by shuyu on 2016/11/10. 14 | */ 15 | public class ClickAtUserSpan extends ClickableSpan { 16 | 17 | private Context context; 18 | private UserModel userModel; 19 | private SpanAtUserCallBack spanClickCallBack; 20 | private int color; 21 | 22 | public ClickAtUserSpan(Context context, UserModel userModel, int color, SpanAtUserCallBack spanClickCallBack) { 23 | this.context = context; 24 | this.userModel = userModel; 25 | this.spanClickCallBack = spanClickCallBack; 26 | this.color = color; 27 | } 28 | 29 | @Override 30 | public void onClick(View view) { 31 | if (spanClickCallBack != null) { 32 | spanClickCallBack.onClick(view, userModel); 33 | } 34 | } 35 | 36 | @Override 37 | public void updateDrawState(TextPaint ds) { 38 | /** 给文字染色 **/ 39 | ds.setColor(color); 40 | /** 去掉下划线 , 默认自带下划线 **/ 41 | ds.setUnderlineText(false); 42 | } 43 | 44 | } -------------------------------------------------------------------------------- /textUtilsLib/src/main/java/com/shuyu/textutillib/LockGridView.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (C) 2013-2014 EaseMob Technologies. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | * Unless required by applicable law or agreed to in writing, software 9 | * distributed under the License is distributed on an "AS IS" BASIS, 10 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | * See the License for the specific language governing permissions and 12 | * limitations under the License. 13 | */ 14 | package com.shuyu.textutillib; 15 | 16 | import android.content.Context; 17 | import android.util.AttributeSet; 18 | import android.widget.GridView; 19 | 20 | public class LockGridView extends GridView { 21 | 22 | public LockGridView(Context context) { 23 | super(context); 24 | } 25 | 26 | public LockGridView(Context context, AttributeSet attrs) { 27 | super(context, attrs); 28 | } 29 | 30 | 31 | @Override 32 | public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 33 | int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); 34 | super.onMeasure(widthMeasureSpec, expandSpec); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /textUtilsLib-kotlin/src/main/java/com/shuyu/textutillib/LockGridView.kt: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (C) 2013-2014 EaseMob Technologies. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | * Unless required by applicable law or agreed to in writing, software 9 | * distributed under the License is distributed on an "AS IS" BASIS, 10 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | * See the License for the specific language governing permissions and 12 | * limitations under the License. 13 | */ 14 | package com.shuyu.textutillib 15 | 16 | import android.content.Context 17 | import android.util.AttributeSet 18 | import android.view.View 19 | import android.widget.GridView 20 | 21 | class LockGridView : GridView { 22 | 23 | constructor(context: Context) : super(context) {} 24 | 25 | constructor(context: Context, attrs: AttributeSet) : super(context, attrs) {} 26 | 27 | 28 | public override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) { 29 | val expandSpec = View.MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE shr 2, View.MeasureSpec.AT_MOST) 30 | super.onMeasure(widthMeasureSpec, expandSpec) 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /textUtilsLib-kotlin/src/main/java/com/shuyu/textutillib/adapter/ExpressionPagerAdapter.kt: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (C) 2013-2014 EaseMob Technologies. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | * Unless required by applicable law or agreed to in writing, software 9 | * distributed under the License is distributed on an "AS IS" BASIS, 10 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | * See the License for the specific language governing permissions and 12 | * limitations under the License. 13 | */ 14 | package com.shuyu.textutillib.adapter 15 | 16 | import android.support.v4.view.PagerAdapter 17 | import android.support.v4.view.ViewPager 18 | import android.view.View 19 | 20 | open class ExpressionPagerAdapter(private val views: List) : PagerAdapter() { 21 | 22 | override fun getCount(): Int = views.size 23 | 24 | override fun isViewFromObject(arg0: View, arg1: Any): Boolean = arg0 === arg1 25 | 26 | override fun instantiateItem(arg0: View?, arg1: Int): Any { 27 | (arg0 as ViewPager).addView(views[arg1]) 28 | return views[arg1] 29 | } 30 | 31 | override fun destroyItem(arg0: View?, arg1: Int, arg2: Any?) { 32 | (arg0 as ViewPager).removeView(views[arg1]) 33 | 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /textUtilsLib/src/main/java/com/shuyu/textutillib/span/LinkSpan.java: -------------------------------------------------------------------------------- 1 | package com.shuyu.textutillib.span; 2 | 3 | 4 | import android.content.Context; 5 | import android.text.TextPaint; 6 | import android.text.TextUtils; 7 | import android.text.style.ClickableSpan; 8 | import android.view.View; 9 | 10 | import com.shuyu.textutillib.listener.SpanUrlCallBack; 11 | 12 | /** 13 | * 显示可点击的手机号码和URL 14 | * Created by shuyu on 2016/11/10. 15 | */ 16 | public class LinkSpan extends ClickableSpan { 17 | 18 | private String url; 19 | private Context context; 20 | private SpanUrlCallBack spanUrlCallBack; 21 | private int color; 22 | 23 | public LinkSpan(Context context, String url, int color, SpanUrlCallBack spanUrlCallBack) { 24 | this.url = url; 25 | this.context = context; 26 | this.spanUrlCallBack = spanUrlCallBack; 27 | this.color = color; 28 | } 29 | 30 | @Override 31 | public void onClick(View widget) { 32 | if ((url.contains("tel:") && TextUtils.isDigitsOnly(url.replace("tel:", ""))) || TextUtils.isDigitsOnly(url)) { 33 | if (spanUrlCallBack != null) 34 | spanUrlCallBack.phone(widget, url); 35 | } else { 36 | if (spanUrlCallBack != null) 37 | spanUrlCallBack.url(widget, url); 38 | } 39 | } 40 | 41 | 42 | @Override 43 | public void updateDrawState(TextPaint ds) { 44 | ds.setColor(color); 45 | /** 去掉下划线 , 默认自带下划线 **/ 46 | ds.setUnderlineText(false); 47 | } 48 | } -------------------------------------------------------------------------------- /app-kotlin/src/main/java/com/example/shuyu/TopicListActivity.kt: -------------------------------------------------------------------------------- 1 | package com.example.shuyu 2 | 3 | import android.app.Activity 4 | import android.content.Intent 5 | import android.os.Bundle 6 | import android.support.v7.app.AppCompatActivity 7 | import android.view.View 8 | import android.widget.AdapterView 9 | import android.widget.ArrayAdapter 10 | import android.widget.ListView 11 | 12 | import com.shuyu.textutillib.model.TopicModel 13 | import kotlinx.android.synthetic.main.activity_user_list.* 14 | 15 | import java.util.ArrayList 16 | 17 | 18 | class TopicListActivity : AppCompatActivity() { 19 | 20 | private val data = ArrayList() 21 | 22 | override fun onCreate(savedInstanceState: Bundle?) { 23 | super.onCreate(savedInstanceState) 24 | setContentView(R.layout.activity_user_list) 25 | 26 | (0..49).mapTo(data) { TopicModel("测试话题" + it, (it * 30).toString() + "") } 27 | 28 | val adapter = ArrayAdapter(this, R.layout.user_list_item, data) 29 | userList.adapter = adapter 30 | userList.onItemClickListener = AdapterView.OnItemClickListener { _, _, position, _ -> 31 | val intent = Intent() 32 | intent.putExtra(DATA, data[position]) 33 | setResult(Activity.RESULT_OK, intent) 34 | finish() 35 | } 36 | 37 | } 38 | override fun onBackPressed() { 39 | setResult(RESULT_CANCELED, intent) 40 | finish() 41 | } 42 | 43 | companion object { 44 | 45 | val DATA = "data" 46 | } 47 | 48 | 49 | } 50 | -------------------------------------------------------------------------------- /app-kotlin/src/main/java/com/example/shuyu/UserListActivity.kt: -------------------------------------------------------------------------------- 1 | package com.example.shuyu 2 | 3 | import android.app.Activity 4 | import android.content.Intent 5 | import android.os.Bundle 6 | import android.support.v7.app.AppCompatActivity 7 | import android.view.View 8 | import android.widget.AdapterView 9 | import android.widget.ArrayAdapter 10 | import android.widget.ListView 11 | 12 | import com.shuyu.textutillib.model.UserModel 13 | import kotlinx.android.synthetic.main.activity_user_list.* 14 | 15 | import java.util.ArrayList 16 | 17 | 18 | class UserListActivity : AppCompatActivity() { 19 | 20 | 21 | private val data = ArrayList() 22 | 23 | override fun onCreate(savedInstanceState: Bundle?) { 24 | super.onCreate(savedInstanceState) 25 | setContentView(R.layout.activity_user_list) 26 | 27 | (0..49).mapTo(data) { UserModel("测试名字" + it, (it * 30).toString() + "") } 28 | 29 | val adapter = ArrayAdapter(this, R.layout.user_list_item, data) 30 | userList.adapter = adapter 31 | userList.onItemClickListener = AdapterView.OnItemClickListener { _, _, position, _ -> 32 | val intent = Intent() 33 | intent.putExtra(DATA, data[position]) 34 | setResult(Activity.RESULT_OK, intent) 35 | finish() 36 | } 37 | 38 | } 39 | 40 | override fun onBackPressed() { 41 | setResult(RESULT_CANCELED, intent) 42 | finish() 43 | } 44 | 45 | companion object { 46 | 47 | val DATA = "data" 48 | } 49 | 50 | 51 | } 52 | -------------------------------------------------------------------------------- /textUtilsLib/src/main/java/com/shuyu/textutillib/adapter/ExpressionPagerAdapter.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (C) 2013-2014 EaseMob Technologies. All rights reserved. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * http://www.apache.org/licenses/LICENSE-2.0 8 | * Unless required by applicable law or agreed to in writing, software 9 | * distributed under the License is distributed on an "AS IS" BASIS, 10 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 11 | * See the License for the specific language governing permissions and 12 | * limitations under the License. 13 | */ 14 | package com.shuyu.textutillib.adapter; 15 | 16 | import android.support.v4.view.PagerAdapter; 17 | import android.support.v4.view.ViewPager; 18 | import android.view.View; 19 | 20 | import java.util.List; 21 | 22 | public class ExpressionPagerAdapter extends PagerAdapter { 23 | 24 | private List views; 25 | 26 | public ExpressionPagerAdapter(List views) { 27 | this.views = views; 28 | } 29 | 30 | @Override 31 | public int getCount() { 32 | return views.size(); 33 | } 34 | 35 | @Override 36 | public boolean isViewFromObject(View arg0, Object arg1) { 37 | return arg0 == arg1; 38 | } 39 | 40 | @Override 41 | public Object instantiateItem(View arg0, int arg1) { 42 | ((ViewPager) arg0).addView(views.get(arg1)); 43 | return views.get(arg1); 44 | } 45 | 46 | @Override 47 | public void destroyItem(View arg0, int arg1, Object arg2) { 48 | ((ViewPager) arg0).removeView(views.get(arg1)); 49 | 50 | } 51 | 52 | } 53 | -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 14 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 28 | 32 | 36 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/richtext/UserListActivity.java: -------------------------------------------------------------------------------- 1 | package com.example.richtext; 2 | 3 | import android.app.Activity; 4 | import android.content.Intent; 5 | import android.os.Bundle; 6 | import android.support.v7.app.AppCompatActivity; 7 | import android.view.View; 8 | import android.widget.AdapterView; 9 | import android.widget.ArrayAdapter; 10 | import android.widget.ListView; 11 | 12 | 13 | import com.shuyu.textutillib.model.UserModel; 14 | 15 | import java.util.ArrayList; 16 | import java.util.List; 17 | 18 | import butterknife.BindView; 19 | import butterknife.ButterKnife; 20 | 21 | public class UserListActivity extends AppCompatActivity { 22 | 23 | public final static String DATA = "data"; 24 | 25 | @BindView(R.id.user_list) 26 | ListView userList; 27 | 28 | private List data = new ArrayList<>(); 29 | 30 | @Override 31 | protected void onCreate(Bundle savedInstanceState) { 32 | super.onCreate(savedInstanceState); 33 | setContentView(R.layout.activity_user_list); 34 | ButterKnife.bind(this); 35 | 36 | for (int i = 0; i < 50; i++) { 37 | UserModel userModel = new UserModel(); 38 | userModel.setUser_name("测试名字" + i); 39 | userModel.setUser_id(i * 30 + ""); 40 | data.add(userModel); 41 | } 42 | 43 | ArrayAdapter adapter = new ArrayAdapter(this, R.layout.user_list_item, data); 44 | userList.setAdapter(adapter); 45 | userList.setOnItemClickListener(new AdapterView.OnItemClickListener() { 46 | @Override 47 | public void onItemClick(AdapterView parent, View view, int position, long id) { 48 | Intent intent = new Intent(); 49 | intent.putExtra(DATA, data.get(position)); 50 | setResult(Activity.RESULT_OK, intent); 51 | finish(); 52 | } 53 | }); 54 | 55 | } 56 | 57 | 58 | } 59 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/richtext/TopicListActivity.java: -------------------------------------------------------------------------------- 1 | package com.example.richtext; 2 | 3 | import android.app.Activity; 4 | import android.content.Intent; 5 | import android.os.Bundle; 6 | import android.support.v7.app.AppCompatActivity; 7 | import android.view.View; 8 | import android.widget.AdapterView; 9 | import android.widget.ArrayAdapter; 10 | import android.widget.ListView; 11 | 12 | import com.shuyu.textutillib.model.TopicModel; 13 | import com.shuyu.textutillib.model.UserModel; 14 | 15 | import java.util.ArrayList; 16 | import java.util.List; 17 | 18 | import butterknife.BindView; 19 | import butterknife.ButterKnife; 20 | 21 | public class TopicListActivity extends AppCompatActivity { 22 | 23 | public final static String DATA = "data"; 24 | 25 | @BindView(R.id.user_list) 26 | ListView userList; 27 | 28 | private List data = new ArrayList<>(); 29 | 30 | @Override 31 | protected void onCreate(Bundle savedInstanceState) { 32 | super.onCreate(savedInstanceState); 33 | setContentView(R.layout.activity_user_list); 34 | ButterKnife.bind(this); 35 | 36 | for (int i = 0; i < 50; i++) { 37 | TopicModel topicModel = new TopicModel(); 38 | topicModel.setTopicName("测试话题" + i); 39 | topicModel.setTopicId(i * 30 + ""); 40 | data.add(topicModel); 41 | } 42 | 43 | ArrayAdapter adapter = new ArrayAdapter(this, R.layout.user_list_item, data); 44 | userList.setAdapter(adapter); 45 | userList.setOnItemClickListener(new AdapterView.OnItemClickListener() { 46 | @Override 47 | public void onItemClick(AdapterView parent, View view, int position, long id) { 48 | Intent intent = new Intent(); 49 | intent.putExtra(DATA, data.get(position)); 50 | setResult(Activity.RESULT_OK, intent); 51 | finish(); 52 | } 53 | }); 54 | 55 | } 56 | 57 | 58 | } 59 | -------------------------------------------------------------------------------- /app/src/main/java/com/example/richtext/bind/RichEditTextBindings.java: -------------------------------------------------------------------------------- 1 | package com.example.richtext.bind; 2 | 3 | import android.app.Activity; 4 | import android.content.Context; 5 | import android.databinding.BindingAdapter; 6 | 7 | import com.example.richtext.R; 8 | import com.shuyu.textutillib.EmojiLayout; 9 | import com.shuyu.textutillib.RichEditText; 10 | import com.shuyu.textutillib.model.TopicModel; 11 | import com.shuyu.textutillib.model.UserModel; 12 | 13 | public class RichEditTextBindings { 14 | 15 | @BindingAdapter("atResult") 16 | public static void setAtResult(RichEditText richEditText, UserModel userModel) { 17 | if (userModel != null) { 18 | richEditText.resolveAtResult(userModel); 19 | } 20 | } 21 | 22 | @BindingAdapter("atResultByEnter") 23 | public static void setAtResultByEnterAt(RichEditText richEditText, UserModel userModel) { 24 | if (userModel != null) { 25 | richEditText.resolveAtResultByEnterAt(userModel); 26 | } 27 | } 28 | 29 | @BindingAdapter("topicResultByEnter") 30 | public static void setTopicResultByEnter(RichEditText richEditText, TopicModel topicModel) { 31 | if (topicModel != null) { 32 | richEditText.resolveTopicResultByEnter(topicModel); 33 | } 34 | } 35 | 36 | @BindingAdapter("topicResult") 37 | public static void setTopicResult(RichEditText richEditText, TopicModel topicModel) { 38 | if (topicModel != null) { 39 | richEditText.resolveTopicResult(topicModel); 40 | } 41 | } 42 | @BindingAdapter("emojiRichTextView") 43 | public static void setEmojiRichTextView(EmojiLayout emojiLayout, Context context) { 44 | if (emojiLayout != null && context != null && context instanceof Activity) { 45 | Activity activity = (Activity) context; 46 | emojiLayout.setEditTextSmile((RichEditText) 47 | activity.findViewById(R.id.mvvm_rich_edit_text)); 48 | } 49 | } 50 | 51 | 52 | } 53 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_new_emoji.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 21 | 22 | 30 | 31 |