Android EditText动态更改文本到表情符号

时间:2011-06-06 08:46:18

标签: java android android-edittext emoticons

如何动态地将编辑中写入的文本更改为表情符号... 例如:“很高兴认识你:)”=动态结果“很高兴见到你[pic]笑脸[pic]”:

    Editest.addTextChangedListener(new TextWatcher() {

        public void onTextChanged(CharSequence s, int start, int before, int count) {

        }

        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {

        }

        public void afterTextChanged(Editable s) {


        }
    });

2 个答案:

答案 0 :(得分:2)

提示:

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

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

就我可以提前考虑,使用5.0

时不应该有任何问题

编辑评论:

你必须以你采取的任何方式实施你自己的经理子布局(),所以你知道立场,因为你是那些把它们放在那里的人。如果你想要做多行(我的方法是单线),你可以做三件事之一:

  1. 为每一行添加新的EditFields并进行链接 同样我谈到了哪里 退格会让你失望 字段,在这种情况下是最后一行。 你必须保持测量方法 大场是基于 文本,看看是否会移动它 到下一行。如果它只是 调整EditFields的位置 地定位。

  2. 您可以在中进行图片放置 多行字段     实现自己的EditField     扩展高度,在这种情况下你会     知道文本的位置和内容     你在线。绘制位图     这将是一个计算问题     (你是什么行号)*(字体     高度)和     getAdvance(text_up_to_bitmap)。

  3. 在哪里实现自己的EditField 你有一个专注的经理     你手动完成所有的     画画。你可以解析一个String     你可以避免捕捉击键     并且可能有一面旗帜     表情应该是。画出文字     在它之前,画出表情符号     继续绘制文本。该     你会遇到困难     必须做的事情,如确定     光标应该在哪里,带来     虚拟键盘,和     处理一些其他任务     EditField为您做的。

答案 1 :(得分:1)

您可以使用regular expression扫描字符串“:)”的文本,然后将其替换为smiley

由于我不知道您的应用正在做什么,我不能说使用TextWatcher是否是个好主意,因为每次输入一个字符时它都会触发。也许在某个事件之后进行替换可能会更好,例如按下OK按钮或TextView失去焦点。