欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

在安卓系统中插入表情到光标位置的代码详解

程序员文章站 2024-03-06 10:10:43
前言     之前写的一个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()); 
  }