加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

[修正] Firemonkey Android 显示 Emoji (颜文字)

发布时间:2020-12-15 04:38:42 所属栏目:大数据 来源:网络整理
导读:问题:在 Android 平台下,显示Emoji 文字,无法显示彩色(皆为黑色),例如 Edit 控件,即使将 Edit.ControlType = Platform 设为平台原生控件,还是没用(真机测试 Edit.ControlType 设定为 Style 与Platform 是一样的,而 iOS 平台则不同)。 修正方法:

问题:在 Android 平台下,显示Emoji 文字,无法显示彩色(皆为黑色),例如 Edit 控件,即使将 Edit.ControlType = Platform 设为平台原生控件,还是没用(真机测试 Edit.ControlType 设定为 Style 与Platform 是一样的,而 iOS 平台则不同)。

修正方法:

请将源码 FMX.TextLayout.GPU.pas复制到自己的工程目录里,再进行修改。

TTextLayoutNG.DoDrawLayout(<span style="color: #008000">{<span style="color: #008000">+++><span style="color: #008000">}Char: UCS4Char; <span style="color: #008000">//<span style="color: #008000"> 加入此行代码 by Aone (2016.11.18)
<span style="color: #0000ff">begin<span style="color: #000000">

...略...

  </span><span style="color: #0000ff"&gt;for</span> K := <span style="color: #800080"&gt;0</span> <span style="color: #0000ff"&gt;to</span> LRun.Chars.Count - <span style="color: #800080"&gt;1</span> <span style="color: #0000ff"&gt;do</span>
  <span style="color: #0000ff"&gt;begin</span>

<span style="color: #008000">{<span style="color: #008000">+++><span style="color: #008000">} Char :=<span style="color: #000000"> LRun.Chars[K]; // 加入此行代码 by Aone (2016.11.18)
Rec :=<span style="color: #000000"> AddOrGetChar(ACanvas,LRun.Chars[K],CharDic,LRun.Font);

...略...

<span style="color: #008000">{<span style="color: #008000">---> ColoredGlyph := TFontGlyphStyle.ColorGlyph in Rec.Glyph.Style; // 删除此代码
{+++><span style="color: #008000">}
<span style="color: #008000">//<span style="color: #008000"> 加下下列代码 by Aone (2016.11.18),取自: FMX.FontGlyphs.iOS
ColoredGlyph :=<span style="color: #000000">
(Char = $10086) or // 追加 (Char = $1F004) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $1F0CF) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $1F170) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $1F171) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $1F17E) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $1F17F) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $1F18F) <span style="color: #0000ff">or<span style="color: #000000">
((Char >= $1F191) <span style="color: #0000ff">and (Char <= $1F19A)) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $1F201) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $1F202) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $1F21A) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $1F22F) <span style="color: #0000ff">or<span style="color: #000000">
((Char >= $1F232) <span style="color: #0000ff">and (Char <= $1F23A)) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $1F250) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $1F251) <span style="color: #0000ff">or<span style="color: #000000">
((Char >= $1F300) <span style="color: #0000ff">and (Char <= $1F320)) <span style="color: #0000ff">or<span style="color: #000000">
((Char >= $1F330) <span style="color: #0000ff">and (Char <= $1F393)) <span style="color: #0000ff">or<span style="color: #000000">
((Char >= $1F3A0) <span style="color: #0000ff">and (Char <= $1F3F0)) <span style="color: #0000ff">or<span style="color: #000000">
((Char >= $1F400) <span style="color: #0000ff">and (Char <= $1F43E)) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $1F440) <span style="color: #0000ff">or<span style="color: #000000">
((Char >= $1F442) <span style="color: #0000ff">and (Char <= $1F49F)) <span style="color: #0000ff">or<span style="color: #000000">
((Char >= $1F4A0) <span style="color: #0000ff">and (Char <= $1F4FC)) <span style="color: #0000ff">or<span style="color: #000000">
((Char >= $1F500) <span style="color: #0000ff">and (Char <= $1F53D)) <span style="color: #0000ff">or<span style="color: #000000">
((Char >= $1F550) <span style="color: #0000ff">and (Char <= $1F567)) <span style="color: #0000ff">or<span style="color: #000000">
((Char >= $1F5FB) <span style="color: #0000ff">and (Char <= $1F64F)) <span style="color: #0000ff">or<span style="color: #000000">
((Char >= $1F680) <span style="color: #0000ff">and (Char <= $1F6C5)) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $<span style="color: #800080">2139) <span style="color: #0000ff">or<span style="color: #000000">
((Char >= $<span style="color: #800080">2194) <span style="color: #0000ff">and (Char <= $<span style="color: #800080">2199)) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $21A9) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $21AA) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $231A) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $231B) <span style="color: #0000ff">or<span style="color: #000000">
((Char >= $<span style="color: #800080">23E9) <span style="color: #0000ff">and (Char <= $23EC)) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $23F0) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $23F3) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $24C2) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $25AA) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $25AB) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $25B6) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $25C0) <span style="color: #0000ff">or<span style="color: #000000">
((Char >= $25FB) <span style="color: #0000ff">and (Char <= $25FE)) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $<span style="color: #800080">2600) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $<span style="color: #800080">2601) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $260E) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $<span style="color: #800080">2611) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $<span style="color: #800080">2614) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $<span style="color: #800080">2615) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $261D) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $263A) <span style="color: #0000ff">or<span style="color: #000000">
((Char >= $<span style="color: #800080">2648) <span style="color: #0000ff">and (Char <= $<span style="color: #800080">2653)) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $<span style="color: #800080">2660) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $<span style="color: #800080">2663) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $<span style="color: #800080">2665) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $<span style="color: #800080">2666) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $<span style="color: #800080">2668) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $267B) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $267F) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $<span style="color: #800080">2693) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $26A0) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $26A1) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $26AA) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $26AB) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $26BD) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $26BE) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $26C4) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $26C5) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $26CE) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $26D4) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $26EA) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $26F2) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $26F3) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $26F5) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $26FA) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $26FD) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $<span style="color: #800080">2702) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $<span style="color: #800080">2705) <span style="color: #0000ff">or<span style="color: #000000">
((Char >= $<span style="color: #800080">2708) <span style="color: #0000ff">and (Char <= $270F)) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $<span style="color: #800080">2712) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $<span style="color: #800080">2714) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $<span style="color: #800080">2716) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $<span style="color: #800080">2728) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $<span style="color: #800080">2733) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $<span style="color: #800080">2734) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $<span style="color: #800080">2744) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $<span style="color: #800080">2747) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $274C) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $274E) <span style="color: #0000ff">or<span style="color: #000000">
((Char >= $<span style="color: #800080">2753) <span style="color: #0000ff">and (Char <= $<span style="color: #800080">2755)) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $<span style="color: #800080">2757) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $<span style="color: #800080">2764) <span style="color: #0000ff">or<span style="color: #000000">
((Char >= $<span style="color: #800080">2795) <span style="color: #0000ff">and (Char = $<span style="color: #800080">2797)) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $27B0) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $27BF) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $<span style="color: #800080">2934) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $<span style="color: #800080">2935) <span style="color: #0000ff">or<span style="color: #000000">
((Char >= $2B05) <span style="color: #0000ff">and (Char = $2B07)) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $2B1B) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $2B1C) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $2B50) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $2B55) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $<span style="color: #800080">3030) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $303D) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $<span style="color: #800080">3297) <span style="color: #0000ff">or<span style="color: #000000">
(Char = $<span style="color: #800080">3299<span style="color: #000000">);
<span style="color: #008000">{<span style="color: #008000"><+++<span style="color: #008000">}<span style="color: #000000">

...略...

<span style="color: #0000ff">end;

效果:

官方相关 QC:

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读