在安卓系统中插入表情到光标位置的代码详解
程序员文章站
2024-03-05 11:06:00
前言
之前写的一个android应用,在回复帖子插入表情的时候存在一个bug,就是无法在edittext中指定的光标处插入表情字符串...
前言
之前写的一个android应用,在回复帖子插入表情的时候存在一个bug,就是无法在edittext中指定的光标处插入表情字符串,每次添加的表情字符串都跑到了文字末尾。分析了一下apk源码,发现是在表情盘的onclick响应事件中没有正确处理表情字符串的添加方法,这里记录一下如何在edittext指定光标处插入表情字符串。
edittext光标处插入表情字符串的方法
既然是在edittext控件中插入表情字符串,那首先需要获取edittext控件对象,示例源码如下:
edittext redittext = (edittext) findviewbyid(r.id.r_edittext);
获取了当前edittext控件对象,下一步是要保存当前edittext中已有的字符串,示例源码如下:
string oricontent = redittext.gettext().tostring();
接下来,就是要获取光标的位置了。使用edittext控件提供的getselectionstart()方法。但是,这里需要注意的是,当edittext中没有光标时,使用该方法将返回-1,这显然不是我们想要的光标位置,因此最好和0再做个比较,示例源码如下:
int index = math.max(redittext.getselectionstart(), 0);
剩下的,就是在给定的光标位置插入表情字符串了,然后再设置新的光标位置。完整的插入表情示例源码如下:
private void insertemotion(string insertemotion) { string oricontent = redittext.gettext().tostring(); int index = math.max(redittext.getselectionstart(), 0); stringbuilder sbuilder = new stringbuilder(oricontent); sbuilder.insert(index, insertemotion); redittext.settext(sbuilder.tostring()); redittext.setselection(index + insertemotion.length()); }