ade*_*190 6 android android-appcompat emoji
我正在尝试使用表情符号应用程序兼容文本视图,但我不明白我在实现中做错了什么。
\n我正在尝试渲染这三个表情符号,它在 Android Q 上运行良好,但在 Android Lollipop 上不起作用,请看一下屏幕截图:
据我了解,使用 Emoji App Compat Text View 的想法是让 emoji 集在 Android API 21 及更高版本中正常工作,所以请看一下我的实现,是否有任何遗漏、错误或可能 Emoji App Compat文本视图不像我想象的那样工作?
\n您可以在 github 上获取完整代码或阅读以下主要部分:
\n应用程序的onCreate,设置EmojiCompat,我没有使用捆绑版本:
\nEmojiCompat.init(\n FontRequestEmojiCompatConfig(\n this,\n FontRequest(\n "com.google.android.gms.fonts",\n "com.google.android.gms",\n "Noto Color Emoji Compat",\n R.array.com_google_android_gms_fonts_certs\n )\n ).setReplaceAll(true)\n // I did remove the callback for brevity, but I got the `onInitialized` called.\n)\nRun Code Online (Sandbox Code Playgroud)\nActivity,只需设置布局,获取View并设置文本:
\n<?xml version="1.0" encoding="utf-8"?>\n<androidx.constraintlayout.widget.ConstraintLayout \n\xe2\x80\xa6\n <androidx.emoji.widget.EmojiAppCompatTextView\n android:id="@+id/text_view"\n android:layout_width="wrap_content"\n android:layout_height="wrap_content"\n android:textSize="60sp"\n app:layout_constraintBottom_toBottomOf="parent"\n app:layout_constraintLeft_toLeftOf="parent"\n app:layout_constraintRight_toRightOf="parent"\n app:layout_constraintTop_toTopOf="parent" />\n\xe2\x80\xa6\n</androidx.constraintlayout.widget.ConstraintLayout>\nRun Code Online (Sandbox Code Playgroud)\nclass MainActivity : AppCompatActivity() {\n override fun onCreate(savedInstanceState: Bundle?) {\n super.onCreate(savedInstanceState)\n setContentView(R.layout.activity_main)\n findViewById<EmojiAppCompatTextView>(R.id.text_view).text = getString(R.string.three_emojis)\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n弦乐
\n<string name="three_emojis"></string>\nRun Code Online (Sandbox Code Playgroud)\n梯度
\nplugins {\n id "com.android.application"\n id "kotlin-android"\n}\n\nandroid {\n compileSdkVersion 29\n buildToolsVersion "30.0.2"\n\xe2\x80\xa6\n defaultConfig {\n minSdkVersion 21\n targetSdkVersion 29\n\xe2\x80\xa6\n }\n\xe2\x80\xa6\n}\n\ndependencies {\n implementation "androidx.emoji:emoji-appcompat:1.1.0"\n implementation "androidx.emoji:emoji:1.1.0"\n implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"\n implementation "androidx.appcompat:appcompat:1.2.0"\n implementation "androidx.constraintlayout:constraintlayout:2.0.4"\n implementation "androidx.core:core-ktx:1.3.2"\n implementation "com.google.android.material:material:1.2.1"\n}\nRun Code Online (Sandbox Code Playgroud)\n
结论:默认情况下,将使用文本样式,除非后面跟着 U+FE0F 变体选择器。
这可以使用以下方法进行验证:
情况 1:在所有 Android 版本上返回 false。
EmojiCompat.get().hasEmojiGlyph(String(charArrayOf('\uD83D', '\uDC41')))
Run Code Online (Sandbox Code Playgroud)
情况 2:在 Android API 版本 >=18 上返回 true
EmojiCompat.get().hasEmojiGlyph(String(charArrayOf('\uD83D', '\uDC41', 65039.toChar())))
Run Code Online (Sandbox Code Playgroud)
解决方案:.setUseEmojiAsDefaultStyle(true)
class App : Application() {
override fun onCreate() {
super.onCreate()
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true)
EmojiCompat.init(
FontRequestEmojiCompatConfig(
this,
FontRequest(
"com.google.android.gms.fonts",
"com.google.android.gms",
"Noto Color Emoji Compat",
R.array.com_google_android_gms_fonts_certs
)
).setReplaceAll(true)
.setUseEmojiAsDefaultStyle(true)
.registerInitCallback(object : EmojiCompat.InitCallback() {
override fun onInitialized() {
super.onInitialized()
Toast.makeText(this@App, "EmojiCompat was initialized", LENGTH_SHORT).show()
}
override fun onFailed(throwable: Throwable?) {
super.onFailed(throwable)
throw RuntimeException(throwable)
}
})
)
}
}
Run Code Online (Sandbox Code Playgroud)
在 Android API 19 上测试:
| 归档时间: |
|
| 查看次数: |
1983 次 |
| 最近记录: |