如何动态地将编辑中写入的文本更改为表情符号... 例如:“很高兴认识你:)”=动态结果“很高兴见到你[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) {
}
});
答案 0 :(得分:2)
提示:
您可以做的是创建一个自定义管理器,它是EditFields和BitmapFields的容器。当用户单击Manager内部的初始EditField并开始键入时,您可以让他们键入,直到他们想要一个表情符号。当他们选择它时,您在EditField之后创建一个BitmapField,然后将一个新的EditField放在BitmapField的右侧。您必须跟踪诸如用户点击退格并清空EditField之类的内容,应该将其删除,然后选择BitmapField,后续退格将删除BitmapField并将焦点放在之前的EditField上。 / p>
您还必须创建可以控制其大小的自己的EditField,以及允许退格删除它的BitmapField。
就我可以提前考虑,使用5.0
时不应该有任何问题编辑评论:
你必须以你采取的任何方式实施你自己的经理子布局(),所以你知道立场,因为你是那些把它们放在那里的人。如果你想要做多行(我的方法是单线),你可以做三件事之一:
为每一行添加新的EditFields并进行链接 同样我谈到了哪里 退格会让你失望 字段,在这种情况下是最后一行。 你必须保持测量方法 大场是基于 文本,看看是否会移动它 到下一行。如果它只是 调整EditFields的位置 地定位。
您可以在中进行图片放置 多行字段 实现自己的EditField 扩展高度,在这种情况下你会 知道文本的位置和内容 你在线。绘制位图 这将是一个计算问题 (你是什么行号)*(字体 高度)和 getAdvance(text_up_to_bitmap)。
在哪里实现自己的EditField 你有一个专注的经理 你手动完成所有的 画画。你可以解析一个String 你可以避免捕捉击键 并且可能有一面旗帜 表情应该是。画出文字 在它之前,画出表情符号 继续绘制文本。该 你会遇到困难 必须做的事情,如确定 光标应该在哪里,带来 虚拟键盘,和 处理一些其他任务 EditField为您做的。
答案 1 :(得分:1)
您可以使用regular expression扫描字符串“:)”的文本,然后将其替换为smiley。
由于我不知道您的应用正在做什么,我不能说使用TextWatcher是否是个好主意,因为每次输入一个字符时它都会触发。也许在某个事件之后进行替换可能会更好,例如按下OK按钮或TextView失去焦点。