Android 开发,你遇上 Emoji 头疼吗?,2024年最新安卓面试问项目难点

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip204888 (备注Android)
img

正文

String(Character.toChars(Integer.parseInt(“1F601”, 16)))

例子中使用的是 Kotlin 代码,不过应该不影响阅读。

将生成的 String 对象,传递给 TextView,如果是当前设备支持的 Emoji,就可以正常显示了。

2.2 Emoji 显示不出来情况

上一小节介绍的方式,其实我们是没有做任何特殊处理的,完全是以来设备自己的字体库来进行 Emoji 渲染的。这就会导致有一些 Emoji 在某些设备上显示不出来的情况。

使用这种方案,我用我手边的设备运行之后,来看看显示的效果。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

很清晰的看到,这里有一些 Emoji 无法显示,会被显示成一个豆腐块 “☐” ,而这并不是我们想要的。

接下来我们来看看使用 EmojiCompat 如何来处理它。

三、使用 EmojiCompat

3.1 什么是 EmojiCompat

根据官方文档描述,EmojiCompat 支持库主要是为了让 Android 设备,达到最新的 Emoji 符号的显示效果,它可以防止应用中,出现以豆腐块 “☐” 的形式来显示 Emoji,虽然它仅仅只是因为你当前的设备没有这个字体而已。通过 EmojiCompat ,你的设备无需等待 Android 系统更新,就可以获得最新的 Emoji 表情显示效果。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3.2 如何使用 EmojiCompat

EmojiCompat 支持库,最低支持到 Android 4.4(Api Level 19) 的系统设备。

EmojiCompat 提供两种字体的支持方式,它们分别是:

  1. 可下载的字体配置。
  2. 本地捆绑的字体配置。

这两种使用方式,除了引用的库不同之外,最根本的原因在于,可下载的字体的方式,会在首次启动的时候检查本地是否有该字体,没有的话会从网上下载最新的 Emoji 字体;而本地捆绑的方式,会在 App 打包的过程中,植入一个最新的 Emoji 字体文件,然后遇到不能支持的 Emoji,就会从这个字体文件中,加载资源并且渲染。

目前官方使用的是 NotoColorEmojiCompat.ttf 字体文件,后面会详细讲解到。

我想你应该发现了,本地捆绑的方式会嵌入一个字体文件,无形中增大了 Apk 安装包的体积,但是可下载字体的方式,又完全依赖 Google 服务,所以在国内基本上是处于残废状态,在这个大环境下,我们这里只能选择本地捆绑的方式来使用 EmojiCompat。

无论使用哪种方式配置字体,对于 EmojiCompat 而言,其实是不关心的,它只需要判断当前设备是否支持这个 Emoji,支持就使用系统内置的,不支持的话,就使用 EmojiSpans 来替换 CharSequence,来达到替换渲染的效果。

EmojiCompat 的运行原理如下图所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3.3 本地捆绑的字体配置方式

既然可下载的 Emoji 字体,需要配合 Google 服务,那这里就不再过多介绍了。

本文主要讲解如何使用本地捆绑的方式,使用 EmojiCompat。

第一步,需要添加 Gradle 依赖。

dependencies {

compile “com.android.support:support-emoji-bundled:27.0.2”
}

第二步,初始化 EmojiCompat。

初始化 EmojiCompat ,需要两个步骤。

  1. 首先需要生成一个 BundledEmojiCompatConfig 对象,它的构造方法接收一个 Context。
  2. 再调用 EmojiCompat.init() 方法,将前面生成的 config 传递给它进行初始化。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这个过程越早越好,因为初始化是耗时的,它会去加载打包的时候,嵌入的 Emoji 字体文件,所以大概需要消耗 150ms 的时间,并且占用大概 200kb 的内存。

第三步,使用 EmojiCompat。

初始化完成之后,就剩下如何使用它了。

EmojiCompat 的处理逻辑,前面已经使用图片描述清楚了。它会加载一个 Emoji 字体,然后判断当前设备是否支持需要显示的 Emoji,如果不支持,则使用 EmojiSpans 替换它,最终将处理过的 CharSequence 设置到 TextView 上。

而这个过程,EmojiCompat 提供了非常简单的方法,process()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

从它的签名可以看出,它接受一个 CharSequence 并处理它,然后返回一个 CharSequence。

举个例子:这里转换一个笑脸的表情。

EmojiCompat.get().process(“笑脸: \uD83D\uDE01”)

process() 需要接受一个 Unicode 的字符,所以如果得到的数据是前面提到的 Emoji Code 的话,就需要一步单独的转换。process() 内部已经帮我们完成了转换,这些细节都无需我们关心,我们只需要将它返回的 CharSequence 设置给 TextView 就可以了。

3.4 Emoji AppCompat Widgets

在实际项目中,如果每次都需要通过 EmojiCompat.get().process() 对字符串进行处理,其实也挺麻烦的。为此 Google 还为开发者提供了对应控件支持。

如果需要使用它,就需要引入新的依赖库。

dependencies {
compile “com.android.support:support-emoji-appcompat:27.0.2”
}

引入之后,就可以直接在 XML 中使用 EmojiAppCompat 提供的控件。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

使用 support-emoji-appcompat 只是节省了我们 process() 的步骤,但是依然需要 init()

3.5 自定义控件支持 Emoji

你可以一直使用 progress() 或者使用 EmojiAppCompatXxx 控件,但是如果你想要自定义一个控件来显示 Emoji,就需要使用 EmojiCompat 提供的另外两个帮助类。

  • EmojiTextViewHelper
  • EmojiEditViewHelper

这两个使用起来非常简单,一个用于处理纯展示的控件,一个用于处理有输入的状态的控件,非常的简洁明了。

哪怕不记得了,看看 EmojiAppCompatTextView 和 EmojiAppCompatEditView 中的实现方式就可以了。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这里拿 EmojiAppCompatTextView 举例子,只需要在几个关键的位置上,使用 EmojiTextViewHelper 的对应方法即可。

3.6 EmojiCompat面临的问题

整体来说 EmojiCompat 还是很好用的,无论使用哪种方式加载它,实际上我们都不需要做过多的干预。

这里参考官方文档,列举最常见的几个问题。

1、下载字体的下载策略是怎么样的?

Emoji 字体在第一次使用的时候,会检测是否存在于当前设备,如果不存在则在子线程中进行下载。

2、初始化需要多长时间?

当本地已经有字体之后,初始化 EmojiCompat 大约需要 150 毫秒。

3、EmojiCompat 支持库,会使用多少内存?

目前,Emoji 字体被完全加载之后,会使用大约 200kb 的内存。

4、在 Android 4.4 以下的设备上,使用 EmojiAppCompatXxx 控件会发生什么情况?

EmojiCompat 内部已经做了兼容处理,在低版本上就和使用普通的 AppCompatXxx 控件一样。

5、本地捆绑的 Emoji 字体文件,大约有多大?

本地捆绑的 Emoji 字体文件 NotoColorEmojiCompat.ttf,会在打包的时候嵌入到 assets 目录下,现在实际情况来看大小有 7.4MB,这会直接造成 Apk 的增大。

更多的细节,还是建议大家阅读官方文档。

https://developer.android.google.cn/guide/topics/ui/look-and-feel/emoji-compat.html

四、EmojiCompat 的缺陷?

在实际使用 EmojiCompat 的过程中,还遇到了一个不能算缺陷的缺陷。

学习宝典

对我们开发者来说,一定要打好基础,随时准备战斗。不论寒冬是否到来,都要把自己的技术做精做深。虽然目前移动端的招聘量确实变少了,但中高端的职位还是很多的,这说明行业只是变得成熟规范起来了。竞争越激烈,产品质量与留存就变得更加重要,我们进入了技术赋能业务的时代。

不论遇到什么困难,都不应该成为我们放弃的理由!

很多人在刚接触这个行业的时候或者是在遇到瓶颈期的时候,总会遇到一些问题,比如学了一段时间感觉没有方向感,不知道该从那里入手去学习,对此我针对Android程序员,我这边给大家整理了一套学习宝典!包括不限于高级UI、性能优化、移动架构师、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter等全方面的Android进阶实践技术;希望能帮助到大家,也节省大家在网上搜索资料的时间来学习,也可以分享动态给身边好友一起学习!

【Android核心高级技术PDF文档,BAT大厂面试真题解析】

【算法合集】

【延伸Android必备知识点】

【Android部分高级架构视频学习资源】

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注Android)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

那么很难做到真正的技术提升。**

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注Android)
[外链图片转存中…(img-qP7Q3ST0-1713677771897)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 26
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值