【已解决】 EditText 使用 Html.fromHtml显示问题

我在TextView显示时是正常使用 在adapter中的代码块
// 将html语言转化为对应表情
Spanned sp = Html.fromHtml(content, new Html.ImageGetter() {
@Override
public Drawable getDrawable(String source) {
return AllUtils.parserEmoji(mContext,source, (int) holder.tv_content.getTextSize()); // 获取本地的
}
}, null);
holder.tv_content.setText(sp);
在editText 中写法如下
String inputEmoji = String.format(AllUtils.imgbody , emojiName);
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(et_moyu.getText().toString()).append(inputEmoji);
Log.e("-->","et_moyu.getText() = "+ et_moyu.getText().toString());
Spanned sp = Html.fromHtml(stringBuilder.toString(), new Html.ImageGetter() {
@Override
public Drawable getDrawable(String source) {
return AllUtils.parserEmoji(PutMoyuActivity.this,source, (int) et_moyu.getTextSize());
}
}, null);
et_moyu.setText(sp);
如果填入editText中就会发现只有一个最后的表情是显示的 去getText的时候会拿到一些代表情的符号  显示不出并发送出去也是这样的表情 有大佬能解析下吗
AllUtils.方法如下 在大佬的代码下去改造的
/***
* 切割 获取表Constance情包
* @param mContext
* @param source
* @param textSize
* @return
*/
public static Drawable parserEmoji(Context mContext, String source, int textSize) {
//https://cdn.sunofbeaches.com/emoji/1.png
//如果地址没有,直接返回null
if (TextUtils.isEmpty(source)) {
return null;
}
//如果地址有,是否是我们阳光沙滩的表情地址cdn.sunofbeaches.com/emoji
if (!source.contains("cdn.sunofbeaches.com/emoji")) {
//如果不是我们可以支持的表情地址,那放弃,直接返回null
return null;
}
//如果是我们地址,那就截取png的名字
int start = source.lastIndexOf("/");
int end = source.lastIndexOf(".");
if (start == -1 || end == -1) {
//出现-1情况就是找不到这个字符串,这样应影响到后面的截取api
return null;
}
String emojiName = source.substring(start + 1, end);
//判断名字是否在我们内置的范围内
Log.i("-->", "截取的表情名字:" + emojiName);
// 断点表情包
if (emojiName.contains("sob")){
emojiName = emojiName.replace("sob", "");
int emojiDrawableId = Integer.parseInt(emojiName);
Drawable drawable = ContextCompat.getDrawable(mContext, emojiDrawableId);
if (drawable == null) {
return null;
}
//表情的大小和tv的文字大小一致,如果不设置就是宽高0/0
drawable.setBounds(0, 0, textSize, textSize);
return drawable;
}
if (!TextUtils.isDigitsOnly(emojiName) || TextUtils.isEmpty(emojiName)) {
//如果表情名字不是数字,那不是我们的表情,如果后面规则有改变,可以做同步调整
return null;
}
//判断1-130范围
int emojiId = Integer.parseInt(emojiName);
if (emojiId < 0 || emojiId > 130) {
return null;
}
try {
//因为图片名字是动态,这个需要反射获取内置表情
Field declaredField = R.drawable.class.getDeclaredField("emoji_" + emojiName);
int emojiDrawableId = declaredField.getInt(R.drawable.class);
Drawable drawable = ContextCompat.getDrawable(mContext, emojiDrawableId);
if (drawable == null) {
return null;
}
//表情的大小和tv的文字大小一致,如果不设置就是宽高0/0
drawable.setBounds(0, 0, textSize, textSize);
return drawable;
} catch (NoSuchFieldException | IllegalAccessException e) {
e.printStackTrace();
}
return null;
}
发送的表情应该是这种格式吗
public static final String imgbody = "<img class=\"emoji\" src=\"https://cdn.sunofbeaches.com/emoji/%s.png\" width=\"20\" height=\"20\">";
您的每一个用心回答,都会让这个世界变得更美好一些!