Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/200.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 文本与EditText中的ImageSpan混淆_Android_Android Edittext_Spannablestring_Spannable - Fatal编程技术网

Android 文本与EditText中的ImageSpan混淆

Android 文本与EditText中的ImageSpan混淆,android,android-edittext,spannablestring,spannable,Android,Android Edittext,Spannablestring,Spannable,我正在构建一个简单的聊天应用程序,用户可以在其中发送文本和表情符号。我可以将文字和表情符号发送到另一部手机。我的问题是: 1.当我键入内容并添加表情时: 然后我不能在图像的前后键入任何文本。我可以在“o”字母之前写。系统会“看到”我键入的,因此即使我在笑脸之后键入“蜂蜜”,我也看不到它,但EditText会注册它并发送消息: 2.当我只在编辑文本中添加一个表情符号,然后将其删除时,我无法键入任何内容,因为删除的表情符号会出现。它只出现一次,因此无论我输入多少个字符,EditText看起来就像

我正在构建一个简单的聊天应用程序,用户可以在其中发送文本和表情符号。我可以将文字和表情符号发送到另一部手机。我的问题是:

1.当我键入内容并添加表情时:

然后我不能在图像的前后键入任何文本。我可以在“o”字母之前写。系统会“看到”我键入的,因此即使我在笑脸之后键入“蜂蜜”,我也看不到它,但EditText会注册它并发送消息:

2.当我只在编辑文本中添加一个表情符号,然后将其删除时,我无法键入任何内容,因为删除的表情符号会出现。它只出现一次,因此无论我输入多少个字符,EditText看起来就像我删除表情符号之前一样,但是文本发送时没有表情符号,就像所有三种情况一样

3.当我在编辑文本中键入“某物”时,然后在“某物”后插入表情符号:

然后我将光标放在表情符号后并将其删除,剩下的内容如下:

但当我按下“发送”按钮时,会发送正确的消息:

这就是图释按钮侦听器中的内容(当我单击图释将其添加到编辑文本时,此方法被激活)


我会在edittext中添加一个textwatcher,并在用户键入时进行监视,这样我可以重新定位图像/设置文本/进行更正/验证输入/等等

editText.addTextChangedListener(textWatcher);

textWatcher = new TextWatcher() {
    public void afterTextChanged(Editable s) {
        //editText.doStuffHere
        //reposition your image/etc.
    }
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { }
    public void onTextChanged(CharSequence s, int start, int before, int count) { }
};

我找到了解决办法。我所要做的就是将
Spannable.SPAN_INCLUSIVE\u INCLUSIVE
更改为
Spannable.SPAN_INCLUSIVE\u INCLUSIVE

,所以当我键入hello:)/:)时,smiley/txt计数是7。然后我输入“蜂蜜”,这是看不见的,但它在那里,因为键入的字符数已增加到12个。对此我能做些什么?对不起,这一次我处于面包屑模式。也许后文中的某些内容发生了变化。。。。如果(s.contains(“:”),然后在ContextChanged下,通过确定“:”的位置并使用editText.getText和editText.setText.I有相同的问题,使用start、before和count来重建文本输出,但是
Spannable.SPAN_EXCLUSIVE\u EXCLUSIVE
无法解决我的果冻豆设备上的问题。在安卓2.2上,它的工作原理与预期一致。你有这方面的信息吗?不幸的是我没有,我也没有果冻豆device@fish我已经在Jelly Bean(emulator)中进行了测试,没有问题。在哪里可以修复它?是的,正如您在接受的答案中看到的那样
editText.addTextChangedListener(textWatcher);

textWatcher = new TextWatcher() {
    public void afterTextChanged(Editable s) {
        //editText.doStuffHere
        //reposition your image/etc.
    }
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { }
    public void onTextChanged(CharSequence s, int start, int before, int count) { }
};