【问题标题】:Blackberry - Smileys in text field黑莓 - 文本字段中的笑脸
【发布时间】:2011-05-30 11:13:50
【问题描述】:

我正在寻找一种在文本字段(LabelField、EditField 等)中插入表情符号/笑脸/任何位图的方法。从我到目前为止的研究来看,没有直接的方法可以做到这一点,所以我一直试图模拟这种行为。

我正在考虑使用普通文本字段而不是笑脸来插入空格,然后将一些 BitmapFields 放置在笑脸应该在的文本字段上。问题是我没有可靠/快速的方法来找到角色在屏幕上的位置 (x,y)。

你能给我一些想法吗?

你能想出解决这个问题的其他方法吗?

我敢肯定,很多人都曾遇到过这类问题。我希望有人设法找到解决方案。无论多么疯狂/复杂/困难,我都渴望接受任何解决方案。

另外,我想在 SDK 5.0 及更高版本中使用它,但我只会满足于 6.0。

【问题讨论】:

标签: blackberry text textbox emoticons


【解决方案1】:

您可以做的是创建一个自定义管理器,它是 EditFields 和 BitmapFields 的容器。当用户单击 Manager 内的初始 EditField 并开始输入时,您让他们输入直到他们想要表情符号。当他们选择它时,您在 EditField 之后创建一个 BitmapField,然后在 BitmapField 的右侧放置一个新的 EditField。您必须跟踪诸如当用户点击退格键并清空 EditField 时,它应该被删除,然后他们正在选择 BitmapField,随后的退格键将删除 BitmapField 并将焦点放在前一个 EditField 上。

您还必须创建自己的可以控制大小的 EditField,以及允许退格删除它的 BitmapField。

据我所知,在 5.0 中使用它应该没有任何问题

为 cmets 编辑:

您必须以您采用的任何方法实现您自己的 Manager 的 sublayout(),这样您就知道位置,因为您是把它们放在那里的人。如果你想做多行(我的方法是单行),你可以做以下三件事之一:

1.) 只需为每一行添加新的 EditField,并按照我谈到的退格键将您带到前一个字段的方式进行链接,在这种情况下是最后一行。您必须根据文本测量字段的大小,并查看是否会将其移动到下一行。如果它只是调整 EditFields 的位置。

2.) 您可以通过实现自己的扩展高度的 EditField 来在多行字段中放置图像,在这种情况下,您将知道文本在哪里以及您所在的行。绘制位图需要计算(你是什么行号)*(字体高度)和 getAdvance(text_up_to_bitmap)。

3.) 实现您自己的 EditField,您可以在其中手动完成所有绘图的可聚焦管理器。您可以解析从捕获击键中保存的字符串,并且可能在表情符号应位于的位置上有一个标志。在它之前画出文字,画出表情,然后继续画文字。这样做的困难在于您必须做一些事情,例如确定光标应该在哪里、调出虚拟键盘以及处理 EditField 为您执行的一些其他任务。

【讨论】:

  • 我已经考虑过这种方法。但是有两个大问题:
  • 1. EditFields 在布局方面是矩形。因此,当我有一个 2 行或更多行的编辑字段,并且我在该行的中间插入一个表情符号时,下一个 EditField 应该在表情符号之后开始,在上一个 EditField 的最后一行,它的 X 位置将在之后表情符号(在屏幕中间的某处)。即使假设重叠的 EditField 行没有任何问题,第二个 EditField 也会从屏幕中间开始绘制文本。
  • 2.我看不到任何方法可以准确地找到我应该在屏幕上放置表情符号的位置。我需要一种方法来计算 EditField 中最后一个字符的位置。 Font.getHeight() 和 getAdvance() 没有太大帮助,因为我无法获得 EditField 的行(行在哪里结束?)。根据 EditField 的宽度,文本的重排方式可能会有很大差异。
  • 你所说的几乎正是我一直在想的 :) 所以我想我不会顿悟并找到一个简单的解决方案......我会将问题标记为已解决因为我认为我不会得到更好的答案,但是如果您有任何其他想法,请分享。感谢您的意见。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多