横屏模式下SpannableString显示不正确

8

我有一段代码,使用SpannableString将一些图片添加到EditText中:

SpannableString ss = new SpannableString("Some random String in my application.");
Drawable d = getResources().getDrawable(R.drawable.emoticon_0001);
ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BOTTOM);
ss.setSpan(span, startIndex, endIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

代码中有一些索引计算,因为它们不重要,所以我没有包含在内。这段代码运行良好。以下是一些图片:

非编辑模式下的纵向和横向:

Portrait Landscape

然而,一旦我在横向模式下开始编辑,图像后面的文本就会出现:

My name is problem, BIG problem

正如大多数人所知道的那样,奇怪的字符串代表iPhone中表情符号的Unicode。有人遇到过这个问题吗?

编辑:使用android:imeOptions="actionDone|flagNoExtractUi"进行测试,但无效,单词建议会覆盖我的EditText。


我没有看到这个问题,但是我已经做了足够多的键盘工作,对正在发生的事情有一个很好的猜测。看起来当ExtractView被显示时(ExtractView是在键盘上方的landscape edit的一部分,实际上是由Android框架绘制的,并且从键盘的角度来看是你的应用程序的一部分),你失去了图像跨度,只剩下纯文本。为什么会这样,以及如何解决,我目前还没有好的想法。它在其他应用程序中也发生吗?比如消息应用程序?在纵向编辑中呢? - Gabe Sechan
谢谢您提供的信息,我已经在众所周知的通讯应用程序WhatsApp上进行了测试。它显示这些表情符号为空格。这是有道理的,因为这些字符代表Unicode,如果找不到与代码相关联的适当符号,它们将为空格。就像从iPhone SMS发送表情符号到Android设备一样,也会显示为空格。 - Chor Wai Chun
1
@GabeSechan 抱歉没有回答你的问题,纵向模式下的编辑工作正常。问题只发生在横向编辑时,WhatsApp也是如此。 - Chor Wai Chun
肯定听起来像是你在提取模式下丢失了你的跨度。但如果WhatsApp在提取模式下也只丢失图像,那就像是一个框架错误,而不是你自己的问题。 - Gabe Sechan
@GabeSechan 是的,只是想看看是否有人对此有解决方案或变通方法。嗯,它们也不完美,所以如果我能解决一些它们尚未解决的问题就好了。 - Chor Wai Chun
1个回答

0
我建议在显示编辑键盘之前,将您的可跨度字符串中的HTML代码转换为纯UNICODE字符串。如果UNICODE中支持表情符号,则应该在编辑中显示。编辑完成后,将其转换回HTML格式。
{{link1:Android HTML解码}}

我不太确定Android现在是否支持这些表情符号的Unicode编码。在我提出这个问题的时候,只有iPhone上的表情符号是“合法”的。如果你从iPhone发送带有表情符号的短信到Android手机,Android手机将无法识别。 - Chor Wai Chun

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接