Java 如何用EditText中的图像替换字符串?

Java 如何用EditText中的图像替换字符串?,java,android,image,emoji,Java,Android,Image,Emoji,我目前正在开发一个简单的聊天应用程序。我想在此应用程序中添加表情符号功能。 我已经有了一个从其他用户接收字符串的函数。我想要的是——如果用户发送的文本包含“:D”或“:p”之类的字符序列,我希望将它们更改为表情符号。如何实现此功能 我想要这样一个函数: public void updateMessage(){ if (receivedMessage.contains(":D")){ receivedMessage.replace(":D",image); }

我目前正在开发一个简单的聊天应用程序。我想在此应用程序中添加表情符号功能。 我已经有了一个从其他用户接收字符串的函数。我想要的是——如果用户发送的文本包含“:D”或“:p”之类的字符序列,我希望将它们更改为表情符号。如何实现此功能

我想要这样一个函数:

public void updateMessage(){
    if (receivedMessage.contains(":D")){
        receivedMessage.replace(":D",image);
    }
    messageLog.append(receivedMessage);
}

如果可能的话,请帮助我。如果还有其他方法,请提及。

使用SpannableString可以很容易地实现它。下面是一个代码实现示例

package com.jslan.nabin.emosample;

import android.graphics.drawable.Drawable;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.style.ImageSpan;
import android.widget.EditText;


public class MainActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        EditText textBox = (EditText) findViewById(R.id.textBox);//I have created an EditText named textBox in activity_main.xml
        Drawable d;
        ImageSpan span;
        String abc = "some :D message :D";
        SpannableString ss = new SpannableString(abc);
        for(int i = 0; i<abc.length();i++){//loop to check presence of other emoji strings.
            if (abc.contains(":D")){
                int startSpan = abc.indexOf(":D");
                d = getResources().getDrawable(R.drawable.laugh); // I have kept laugh.png of size 24x24 in drawable folder.
                d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
                span = new ImageSpan(d, ImageSpan.ALIGN_BASELINE);
                ss.setSpan(span, startSpan, startSpan+2, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
                abc = abc.replaceFirst(":D","  "); //replace with two blank spaces.
            }
            //to check other types of emoji, use else if ladder and place the similar code.
        }
        textBox.append(ss);
    }
}
package com.jslan.nabin.emosample;
导入android.graphics.drawable.drawable;
导入android.support.v7.app.ActionBarActivity;
导入android.os.Bundle;
导入android.text.Spannable;
导入android.text.SpannableString;
导入android.text.style.ImageSpan;
导入android.widget.EditText;
公共类MainActivity扩展了ActionBarActivity{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
EditText textBox=(EditText)findViewById(R.id.textBox);//我在activity_main.xml中创建了一个名为textBox的EditText
可抽出式d;
图像跨度;
字符串abc=“some:D消息:D”;
SpannableString ss=新的SpannableString(abc);
对于(inti=0;i您可以这样尝试

 if (rosan.contains(":p")){
            int span = abc.indexOf(":p");
            res = getResources().getDrawable(R.drawable.myImage); 
            res.setBounds(0, 0, res.getIntrinsicWidth(), res.getIntrinsicHeight());
            span = new ImageSpan(res, ImageSpan.ALIGN_BASELINE);
            ss.setSpan(span, startSpan, startSpan+2, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
            rosan = rosan.replaceFirst(":D","  "); //replace with two blank spaces.
        }

这不是重复的。无论是谁将其标记为重复的,都犯了一个错误。@Karakuri我现在能做什么?我是这个论坛的新用户。我想你唯一能做的就是再问一次。也许链接到这个,并明确说明它被错误地标记为重复的,并且与通过@Mena@Karakuri我仍然认为这是一只小白鼠te,如果你看看我指出的问题。但也许我遗漏了一点,在这种情况下,我很乐意重新打开。@karakuri谢谢你的回答。我会在90分钟后尝试。我只能在90分钟后问。我不知道为什么stackoverflow对新用户非常严格。